All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mel Gorman <mgorman@suse.de>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Alexey Lyahkov <alexey.lyashkov@gmail.com>,
	Andrew Perepechko <anserper@ya.ru>,
	Robin Dong <sanbai@taobao.com>, Theodore Tso <tytso@mit.edu>,
	Hugh Dickins <hughd@google.com>, Rik van Riel <riel@redhat.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Bernd Schubert <bernd.schubert@fastmail.fm>,
	David Howells <dhowells@redhat.com>,
	Trond Myklebust <Trond.Myklebust@netapp.com>,
	Linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	Linux-ext4 <linux-ext4@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Linux-mm <linux-mm@kvack.org>
Subject: Re: [PATCH 2/4] mm: pagevec: Defer deciding what LRU to add a page to until pagevec drain time
Date: Thu, 16 May 2013 15:29:42 +0100	[thread overview]
Message-ID: <20130516142941.GK11497@suse.de> (raw)
In-Reply-To: <20130515155330.35036978515a6d8e0fe98feb@linux-foundation.org>

On Wed, May 15, 2013 at 03:53:30PM -0700, Andrew Morton wrote:
> On Mon, 13 May 2013 11:21:20 +0100 Mel Gorman <mgorman@suse.de> wrote:
> 
> > mark_page_accessed cannot activate an inactive page that is located on
> > an inactive LRU pagevec. Hints from filesystems may be ignored as a
> > result. In preparation for fixing that problem, this patch removes the
> > per-LRU pagevecs and leaves just one pagevec. The final LRU the page is
> > added to is deferred until the pagevec is drained.
> > 
> > This means that fewer pagevecs are available and potentially there is
> > greater contention on the LRU lock. However, this only applies in the case
> > where there is an almost perfect mix of file, anon, active and inactive
> > pages being added to the LRU. In practice I expect that we are adding
> > stream of pages of a particular time and that the changes in contention
> > will barely be measurable.
> > 
> > ...
> >
> > index c612a6a..0911579 100644
> > --- a/mm/swap.c
> > +++ b/mm/swap.c
> > @@ -39,7 +39,7 @@
> >  /* How many pages do we try to swap or page in/out together? */
> >  int page_cluster;
> >  
> > -static DEFINE_PER_CPU(struct pagevec[NR_LRU_LISTS], lru_add_pvecs);
> > +static DEFINE_PER_CPU(struct pagevec, lru_add_pvec);
> >  static DEFINE_PER_CPU(struct pagevec, lru_rotate_pvecs);
> >  static DEFINE_PER_CPU(struct pagevec, lru_deactivate_pvecs);
> >  
> > @@ -460,13 +460,18 @@ EXPORT_SYMBOL(mark_page_accessed);
> >   */
> 
> The comment preceding __lru_cache_add() needs an update.
> 

This?

---8<---
diff --git a/mm/swap.c b/mm/swap.c
index 05944d4..ac23602 100644
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -489,12 +489,10 @@ void mark_page_accessed(struct page *page)
 EXPORT_SYMBOL(mark_page_accessed);
 
 /*
- * Order of operations is important: flush the pagevec when it's already
- * full, not when adding the last page, to make sure that last page is
- * not added to the LRU directly when passed to this function. Because
- * mark_page_accessed() (called after this when writing) only activates
- * pages that are on the LRU, linear writes in subpage chunks would see
- * every PAGEVEC_SIZE page activated, which is unexpected.
+ * Queue the page for addition to the LRU via pagevec. The decision on whether
+ * to add the page to the [in]active [file|anon] list is deferred until the
+ * pagevec is drained. This gives a chance for the caller of __lru_cache_add()
+ * have the page added to the active list using mark_page_accessed().
  */
 void __lru_cache_add(struct page *page)
 {

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Mel Gorman <mgorman@suse.de>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Alexey Lyahkov <alexey.lyashkov@gmail.com>,
	Andrew Perepechko <anserper@ya.ru>,
	Robin Dong <sanbai@taobao.com>, Theodore Tso <tytso@mit.edu>,
	Hugh Dickins <hughd@google.com>, Rik van Riel <riel@redhat.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Bernd Schubert <bernd.schubert@fastmail.fm>,
	David Howells <dhowells@redhat.com>,
	Trond Myklebust <Trond.Myklebust@netapp.com>,
	Linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	Linux-ext4 <linux-ext4@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Linux-mm <linux-mm@kvack.org>
Subject: Re: [PATCH 2/4] mm: pagevec: Defer deciding what LRU to add a page to until pagevec drain time
Date: Thu, 16 May 2013 15:29:42 +0100	[thread overview]
Message-ID: <20130516142941.GK11497@suse.de> (raw)
In-Reply-To: <20130515155330.35036978515a6d8e0fe98feb@linux-foundation.org>

On Wed, May 15, 2013 at 03:53:30PM -0700, Andrew Morton wrote:
> On Mon, 13 May 2013 11:21:20 +0100 Mel Gorman <mgorman@suse.de> wrote:
> 
> > mark_page_accessed cannot activate an inactive page that is located on
> > an inactive LRU pagevec. Hints from filesystems may be ignored as a
> > result. In preparation for fixing that problem, this patch removes the
> > per-LRU pagevecs and leaves just one pagevec. The final LRU the page is
> > added to is deferred until the pagevec is drained.
> > 
> > This means that fewer pagevecs are available and potentially there is
> > greater contention on the LRU lock. However, this only applies in the case
> > where there is an almost perfect mix of file, anon, active and inactive
> > pages being added to the LRU. In practice I expect that we are adding
> > stream of pages of a particular time and that the changes in contention
> > will barely be measurable.
> > 
> > ...
> >
> > index c612a6a..0911579 100644
> > --- a/mm/swap.c
> > +++ b/mm/swap.c
> > @@ -39,7 +39,7 @@
> >  /* How many pages do we try to swap or page in/out together? */
> >  int page_cluster;
> >  
> > -static DEFINE_PER_CPU(struct pagevec[NR_LRU_LISTS], lru_add_pvecs);
> > +static DEFINE_PER_CPU(struct pagevec, lru_add_pvec);
> >  static DEFINE_PER_CPU(struct pagevec, lru_rotate_pvecs);
> >  static DEFINE_PER_CPU(struct pagevec, lru_deactivate_pvecs);
> >  
> > @@ -460,13 +460,18 @@ EXPORT_SYMBOL(mark_page_accessed);
> >   */
> 
> The comment preceding __lru_cache_add() needs an update.
> 

This?

---8<---
diff --git a/mm/swap.c b/mm/swap.c
index 05944d4..ac23602 100644
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -489,12 +489,10 @@ void mark_page_accessed(struct page *page)
 EXPORT_SYMBOL(mark_page_accessed);
 
 /*
- * Order of operations is important: flush the pagevec when it's already
- * full, not when adding the last page, to make sure that last page is
- * not added to the LRU directly when passed to this function. Because
- * mark_page_accessed() (called after this when writing) only activates
- * pages that are on the LRU, linear writes in subpage chunks would see
- * every PAGEVEC_SIZE page activated, which is unexpected.
+ * Queue the page for addition to the LRU via pagevec. The decision on whether
+ * to add the page to the [in]active [file|anon] list is deferred until the
+ * pagevec is drained. This gives a chance for the caller of __lru_cache_add()
+ * have the page added to the active list using mark_page_accessed().
  */
 void __lru_cache_add(struct page *page)
 {

  reply	other threads:[~2013-05-16 14:29 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-13 10:21 [PATCH 0/4] Obey mark_page_accessed hint given by filesystems v2 Mel Gorman
2013-05-13 10:21 ` Mel Gorman
2013-05-13 10:21 ` [PATCH 1/4] mm: Add tracepoints for LRU activation and insertions Mel Gorman
2013-05-13 10:21   ` Mel Gorman
2013-05-15 17:39   ` Rik van Riel
2013-05-15 17:39     ` Rik van Riel
2013-05-13 10:21 ` [PATCH 2/4] mm: pagevec: Defer deciding what LRU to add a page to until pagevec drain time Mel Gorman
2013-05-13 10:21   ` Mel Gorman
2013-05-15 22:53   ` Andrew Morton
2013-05-15 22:53     ` Andrew Morton
2013-05-16 14:29     ` Mel Gorman [this message]
2013-05-16 14:29       ` Mel Gorman
2013-05-13 10:21 ` [PATCH 3/4] mm: Activate !PageLRU pages on mark_page_accessed if page is on local pagevec Mel Gorman
2013-05-13 10:21   ` Mel Gorman
2013-05-15 17:40   ` Rik van Riel
2013-05-15 17:40     ` Rik van Riel
2013-05-15 22:55   ` Andrew Morton
2013-05-15 22:55     ` Andrew Morton
2013-05-16 13:41     ` Mel Gorman
2013-05-16 13:41       ` Mel Gorman
2013-05-20 22:09       ` Andrew Morton
2013-05-20 22:09         ` Andrew Morton
2013-05-13 10:21 ` [PATCH 4/4] mm: Remove lru parameter from __pagevec_lru_add and remove parts of pagevec API Mel Gorman
2013-05-13 10:21   ` Mel Gorman
2013-05-15 17:46   ` Rik van Riel
2013-05-15 17:46     ` Rik van Riel
2013-05-15 22:56   ` Andrew Morton
2013-05-15 22:56     ` Andrew Morton
2013-05-16 14:19     ` Mel Gorman
2013-05-16 14:19       ` Mel Gorman

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=20130516142941.GK11497@suse.de \
    --to=mgorman@suse.de \
    --cc=Trond.Myklebust@netapp.com \
    --cc=akpm@linux-foundation.org \
    --cc=alexey.lyashkov@gmail.com \
    --cc=anserper@ya.ru \
    --cc=bernd.schubert@fastmail.fm \
    --cc=dhowells@redhat.com \
    --cc=hannes@cmpxchg.org \
    --cc=hughd@google.com \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=riel@redhat.com \
    --cc=sanbai@taobao.com \
    --cc=tytso@mit.edu \
    /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.