All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Weiner <hannes@cmpxchg.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org, Dave Chinner <david@fromorbit.com>,
	Yafang Shao <laoar.shao@gmail.com>,
	Michal Hocko <mhocko@suse.com>, Roman Gushchin <guro@fb.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Al Viro <viro@zeniv.linux.org.uk>,
	kernel-team@fb.com
Subject: Re: [PATCH] vfs: keep inodes with page cache off the inode shrinker LRU
Date: Thu, 14 May 2020 07:27:02 -0400	[thread overview]
Message-ID: <20200514112702.GB544269@cmpxchg.org> (raw)
In-Reply-To: <20200513141519.061f8fca4788cd02b4d7068f@linux-foundation.org>

On Wed, May 13, 2020 at 02:15:19PM -0700, Andrew Morton wrote:
> On Tue, 12 May 2020 17:29:36 -0400 Johannes Weiner <hannes@cmpxchg.org> wrote:
> 
> > 
> > ...
> >
> > Solution
> > 
> > This patch fixes the aging inversion described above on
> > !CONFIG_HIGHMEM systems, without reintroducing the problems associated
> > with excessive shrinker LRU rotations, by keeping populated inodes off
> > the shrinker LRUs entirely.
> > 
> > Currently, inodes are kept off the shrinker LRU as long as they have
> > an elevated i_count, indicating an active user. Unfortunately, the
> > page cache cannot simply hold an i_count reference, because unlink()
> > *should* result in the inode being dropped and its cache invalidated.
> > 
> > Instead, this patch makes iput_final() consult the state of the page
> > cache and punt the LRU linking to the VM if the inode is still
> > populated; the VM in turn checks the inode state when it depopulates
> > the page cache, and adds the inode to the LRU if necessary.
> > 
> > This is not unlike what we do for dirty inodes, which are moved off
> > the LRU permanently until writeback completion puts them back on (iff
> > still unused). We can reuse the same code -- inode_add_lru() - here.
> > 
> > This is also not unlike page reclaim, where the lower VM layer has to
> > negotiate state with the higher VFS layer. Follow existing precedence
> > and handle the inversion as much as possible on the VM side:
> > 
> > - introduce an I_PAGES flag that the VM maintains under the i_lock, so
> >   that any inode code holding that lock can check the page cache state
> >   without having to lock and inspect the struct address_space
> 
> Maintaining the same info in two places is a hassle.  Is this
> optimization worthwhile?

Hm, maybe not. I'll try to get rid of it and test cache / LRU state
directly.

> > - introduce inode_pages_set() and inode_pages_clear() to maintain the
> >   inode LRU state from the VM side, then update all cache mutators to
> >   use them when populating the first cache entry or clearing the last
> > 
> > With this, the concept of "inodesteal" - where the inode shrinker
> > drops page cache - is relegated to CONFIG_HIGHMEM systems only. The VM
> > is in charge of the cache, the shrinker in charge of struct inode.
> 
> How tested is this on highmem machines?

I don't have a highmem machine, but my code is ifdeffed out on
CONFIG_HIGHMEM so the behavior shouldn't have changed there.

  reply	other threads:[~2020-05-14 11:27 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-11 17:55 [PATCH] vfs: keep inodes with page cache off the inode shrinker LRU Johannes Weiner
2020-02-11 18:20 ` Johannes Weiner
2020-02-11 19:05 ` Rik van Riel
2020-02-11 19:05   ` Rik van Riel
2020-02-11 19:31   ` Johannes Weiner
2020-02-11 23:44     ` Andrew Morton
2020-02-12  0:28       ` Linus Torvalds
2020-02-12  0:28         ` Linus Torvalds
2020-02-12  0:47         ` Andrew Morton
2020-02-12  1:03           ` Linus Torvalds
2020-02-12  1:03             ` Linus Torvalds
2020-02-12  1:03             ` Linus Torvalds
2020-02-12  8:50             ` Russell King - ARM Linux admin
2020-02-12  8:50               ` Russell King - ARM Linux admin
2020-02-13  9:50               ` Lucas Stach
2020-02-13  9:50                 ` Lucas Stach
2020-02-13  9:50                 ` Lucas Stach
2020-02-13 16:52               ` Arnd Bergmann
2020-02-13 16:52                 ` Arnd Bergmann
2020-02-13 16:52                 ` Arnd Bergmann
2020-02-15 11:25                 ` Geert Uytterhoeven
2020-02-15 11:25                   ` [cip-dev] " Geert Uytterhoeven
2020-02-15 11:25                   ` Geert Uytterhoeven
2020-02-15 11:25                   ` Geert Uytterhoeven
2020-02-15 16:59                   ` Arnd Bergmann
2020-02-15 16:59                     ` [cip-dev] " Arnd Bergmann
2020-02-15 16:59                     ` Arnd Bergmann
2020-02-15 16:59                     ` Arnd Bergmann
2020-02-16  9:44                     ` Geert Uytterhoeven
2020-02-16  9:44                       ` [cip-dev] " Geert Uytterhoeven
2020-02-16  9:44                       ` Geert Uytterhoeven
2020-02-16  9:44                       ` Geert Uytterhoeven
2020-02-16 19:54                       ` Chris Paterson
2020-02-16 19:54                         ` [cip-dev] " Chris Paterson
2020-02-16 19:54                         ` Chris Paterson
2020-02-16 20:38                         ` Arnd Bergmann
2020-02-16 20:38                           ` [cip-dev] " Arnd Bergmann
2020-02-16 20:38                           ` Arnd Bergmann
2020-02-16 20:38                           ` Arnd Bergmann
2020-02-20 14:35                           ` Chris Paterson
2020-02-20 14:35                             ` [cip-dev] " Chris Paterson
2020-02-20 14:35                             ` Chris Paterson
2020-02-26 18:04                 ` santosh.shilimkar
2020-02-26 18:04                   ` santosh.shilimkar
2020-02-26 21:01                   ` Arnd Bergmann
2020-02-26 21:01                     ` Arnd Bergmann
2020-02-26 21:01                     ` Arnd Bergmann
2020-02-26 21:11                     ` santosh.shilimkar
2020-02-26 21:11                       ` santosh.shilimkar
2020-03-06 20:34                       ` Nishanth Menon
2020-03-06 20:34                         ` Nishanth Menon
2020-03-07  1:08                         ` santosh.shilimkar
2020-03-07  1:08                           ` santosh.shilimkar
2020-03-08 10:58                         ` Arnd Bergmann
2020-03-08 10:58                           ` Arnd Bergmann
2020-03-08 10:58                           ` Arnd Bergmann
2020-03-08 14:19                           ` Russell King - ARM Linux admin
2020-03-08 14:19                             ` Russell King - ARM Linux admin
2020-03-09 13:33                             ` Arnd Bergmann
2020-03-09 13:33                               ` Arnd Bergmann
2020-03-09 13:33                               ` Arnd Bergmann
2020-03-09 14:04                               ` Russell King - ARM Linux admin
2020-03-09 14:04                                 ` Russell King - ARM Linux admin
2020-03-09 15:04                                 ` Arnd Bergmann
2020-03-09 15:04                                   ` Arnd Bergmann
2020-03-09 15:04                                   ` Arnd Bergmann
2020-03-10  9:16                                   ` Michal Hocko
2020-03-10  9:16                                     ` Michal Hocko
2020-03-09 15:59                           ` Catalin Marinas
2020-03-09 15:59                             ` Catalin Marinas
2020-03-09 16:09                             ` Russell King - ARM Linux admin
2020-03-09 16:09                               ` Russell King - ARM Linux admin
2020-03-09 16:57                               ` Catalin Marinas
2020-03-09 16:57                                 ` Catalin Marinas
2020-03-09 19:46                               ` Arnd Bergmann
2020-03-09 19:46                                 ` Arnd Bergmann
2020-03-09 19:46                                 ` Arnd Bergmann
2020-03-11 14:29                                 ` Catalin Marinas
2020-03-11 14:29                                   ` Catalin Marinas
2020-03-11 16:59                                   ` Arnd Bergmann
2020-03-11 16:59                                     ` Arnd Bergmann
2020-03-11 16:59                                     ` Arnd Bergmann
2020-03-11 17:26                                     ` Catalin Marinas
2020-03-11 17:26                                       ` Catalin Marinas
2020-03-11 22:21                                       ` Arnd Bergmann
2020-03-11 22:21                                         ` Arnd Bergmann
2020-03-11 22:21                                         ` Arnd Bergmann
2020-02-12  3:58         ` Matthew Wilcox
2020-02-12  8:09         ` Michal Hocko
2020-02-17 13:31         ` Pavel Machek
2020-02-12 16:35       ` Johannes Weiner
2020-02-12 18:26         ` Andrew Morton
2020-02-12 18:52           ` Johannes Weiner
2020-02-12 12:25 ` Yafang Shao
2020-02-12 12:25   ` Yafang Shao
2020-02-12 16:42   ` Johannes Weiner
2020-02-13  1:47     ` Yafang Shao
2020-02-13  1:47       ` Yafang Shao
2020-02-13 13:46       ` Johannes Weiner
2020-02-14  2:02         ` Yafang Shao
2020-02-14  2:02           ` Yafang Shao
2020-02-13 18:34 ` [PATCH v2] " Johannes Weiner
2020-02-14 16:53 ` [PATCH] " kbuild test robot
2020-02-14 16:53   ` kbuild test robot
2020-02-14 21:30 ` kbuild test robot
2020-02-14 21:30   ` kbuild test robot
2020-02-14 21:30 ` [PATCH] vfs: fix boolreturn.cocci warnings kbuild test robot
2020-02-14 21:30   ` kbuild test robot
2020-05-12 21:29 ` [PATCH] vfs: keep inodes with page cache off the inode shrinker LRU Johannes Weiner
2020-05-13  1:32   ` Yafang Shao
2020-05-13  1:32     ` Yafang Shao
2020-05-13 13:00     ` Johannes Weiner
2020-05-13 21:15   ` Andrew Morton
2020-05-14 11:27     ` Johannes Weiner [this message]
2020-05-14  2:24   ` Andrew Morton
2020-05-14 10:37     ` Johannes Weiner

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=20200514112702.GB544269@cmpxchg.org \
    --to=hannes@cmpxchg.org \
    --cc=akpm@linux-foundation.org \
    --cc=david@fromorbit.com \
    --cc=guro@fb.com \
    --cc=kernel-team@fb.com \
    --cc=laoar.shao@gmail.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@suse.com \
    --cc=torvalds@linux-foundation.org \
    --cc=viro@zeniv.linux.org.uk \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.