All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Weiner <hannes@cmpxchg.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Rik van Riel <riel@surriel.com>,
	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: Wed, 12 Feb 2020 13:52:09 -0500	[thread overview]
Message-ID: <20200212185209.GA206066@cmpxchg.org> (raw)
In-Reply-To: <20200212102645.7b2e5b228048b6d22331e47d@linux-foundation.org>

On Wed, Feb 12, 2020 at 10:26:45AM -0800, Andrew Morton wrote:
> On Wed, 12 Feb 2020 11:35:40 -0500 Johannes Weiner <hannes@cmpxchg.org> wrote:
> 
> > Since the cache purging code was written for highmem scenarios, how
> > about making it specific to CONFIG_HIGHMEM at least?
> 
> Why do I have memories of suggesting this a couple of weeks ago ;)

Sorry, you did. I went back and found your email now. It completely
slipped my mind after that thread went off into another direction.

> > That way we improve the situation for the more common setups, without
> > regressing highmem configurations. And if somebody wanted to improve
> > the CONFIG_HIGHMEM behavior as well, they could still do so.
> > 
> > Somethig like the below delta on top of my patch?
> 
> Does it need to be that complicated?  What's wrong with
> 
> --- a/fs/inode.c~a
> +++ a/fs/inode.c
> @@ -761,6 +761,10 @@ static enum lru_status inode_lru_isolate
>  		return LRU_ROTATE;
>  	}
>  
> +#ifdef CONFIG_HIGHMEM
> +	/*
> +	 * lengthy blah
> +	 */
>  	if (inode_has_buffers(inode) || inode->i_data.nrpages) {
>  		__iget(inode);
>  		spin_unlock(&inode->i_lock);
> @@ -779,6 +783,7 @@ static enum lru_status inode_lru_isolate
>  		spin_lock(lru_lock);
>  		return LRU_RETRY;
>  	}
> +#endif

Pages can show up here even under !CONFIG_HIGHMEM. Because of the lock
order to maintain LRU state (i_lock -> xa_lock), when the page cache
inserts new pages it doesn't unlink the inode from the LRU atomically,
and the shrinker might get here before inode_pages_set(). In that case
we need the shrinker to punt the inode off the LRU (the #else branch).

>  	WARN_ON(inode->i_state & I_NEW);
>  	inode->i_state |= I_FREEING;
> _
> 
> Whatever we do will need plenty of testing.  It wouldn't surprise me
> if there are people who unknowingly benefit from this code on
> 64-bit machines.

If we agree this is the way to go, I can put the patch into our tree
and gather data from the Facebook fleet before we merge it.

  reply	other threads:[~2020-02-12 18:52 UTC|newest]

Thread overview: 96+ 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:31   ` Johannes Weiner
2020-02-11 23:44     ` Andrew Morton
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  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 16:52               ` Arnd Bergmann
2020-02-13 16:52                 ` Arnd Bergmann
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                   ` [cip-dev] " Arnd Bergmann
2020-02-15 16:59                     ` Arnd Bergmann
2020-02-15 16:59                     ` Arnd Bergmann
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                       ` [cip-dev] " Chris Paterson
2020-02-16 19:54                         ` Chris Paterson
2020-02-16 19:54                         ` Chris Paterson
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                           ` [cip-dev] " Chris Paterson
2020-02-20 14:35                             ` 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: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 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 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-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-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 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-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 [this message]
2020-02-12 12:25 ` Yafang Shao
2020-02-12 16:42   ` Johannes Weiner
2020-02-13  1:47     ` Yafang Shao
2020-02-13 13:46       ` Johannes Weiner
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 13:00     ` Johannes Weiner
2020-05-13 21:15   ` Andrew Morton
2020-05-14 11:27     ` Johannes Weiner
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=20200212185209.GA206066@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=riel@surriel.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.