linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Wu Fengguang <fengguang.wu@intel.com>
To: Minchan Kim <minchan.kim@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Rik van Riel <riel@redhat.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"tytso@mit.edu" <tytso@mit.edu>,
	"linux-mm@kvack.org" <linux-mm@kvack.org>,
	Elladan <elladan@eskimo.com>, Nick Piggin <npiggin@suse.de>,
	Christoph Lameter <cl@linux-foundation.org>,
	KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Subject: Re: [RFC][PATCH] vmscan: report vm_flags in page_referenced()
Date: Fri, 8 May 2009 20:15:49 +0800	[thread overview]
Message-ID: <20090508121549.GA17077@localhost> (raw)
In-Reply-To: <28c262360905080509q333ec8acv2d2be69d99e1dfa3@mail.gmail.com>

On Fri, May 08, 2009 at 08:09:24PM +0800, Minchan Kim wrote:
> On Fri, May 8, 2009 at 1:17 PM, Wu Fengguang <fengguang.wu@intel.com> wrote:
> > On Thu, May 07, 2009 at 11:17:46PM +0800, Peter Zijlstra wrote:
> >> On Thu, 2009-05-07 at 17:10 +0200, Johannes Weiner wrote:
> >>
> >> > > @@ -1269,8 +1270,15 @@ static void shrink_active_list(unsigned
> >> > >
> >> > > A  A  A  A  A  /* page_referenced clears PageReferenced */
> >> > > A  A  A  A  A  if (page_mapping_inuse(page) &&
> >> > > - A  A  A  A  A  A  page_referenced(page, 0, sc->mem_cgroup))
> >> > > + A  A  A  A  A  A  page_referenced(page, 0, sc->mem_cgroup)) {
> >> > > + A  A  A  A  A  A  A  A  struct address_space *mapping = page_mapping(page);
> >> > > +
> >> > > A  A  A  A  A  A  A  A  A  pgmoved++;
> >> > > + A  A  A  A  A  A  A  A  if (mapping && test_bit(AS_EXEC, &mapping->flags)) {
> >> > > + A  A  A  A  A  A  A  A  A  A  A  A  list_add(&page->lru, &l_active);
> >> > > + A  A  A  A  A  A  A  A  A  A  A  A  continue;
> >> > > + A  A  A  A  A  A  A  A  }
> >> > > + A  A  A  A  }
> >> >
> >> > Since we walk the VMAs in page_referenced anyway, wouldn't it be
> >> > better to check if one of them is executable? A This would even work
> >> > for executable anon pages. A After all, there are applications that cow
> >> > executable mappings (sbcl and other language environments that use an
> >> > executable, run-time modified core image come to mind).
> >>
> >> Hmm, like provide a vm_flags mask along to page_referenced() to only
> >> account matching vmas... seems like a sensible idea.
> >
> > Here is a quick patch for your opinions. Compile tested.
> >
> > With the added vm_flags reporting, the mlock=>unevictable logic can
> > possibly be made more straightforward.
> >
> > Thanks,
> > Fengguang
> > ---
> > vmscan: report vm_flags in page_referenced()
> >
> > This enables more informed reclaim heuristics, eg. to protect executable
> > file pages more aggressively.
> >
> > Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
> > ---
> > A include/linux/rmap.h | A  A 5 +++--
> > A mm/rmap.c A  A  A  A  A  A | A  30 +++++++++++++++++++++---------
> > A mm/vmscan.c A  A  A  A  A | A  A 7 +++++--
> > A 3 files changed, 29 insertions(+), 13 deletions(-)
> >
> > --- linux.orig/include/linux/rmap.h
> > +++ linux/include/linux/rmap.h
> > @@ -83,7 +83,8 @@ static inline void page_dup_rmap(struct
> > A /*
> > A * Called from mm/vmscan.c to handle paging out
> > A */
> > -int page_referenced(struct page *, int is_locked, struct mem_cgroup *cnt);
> > +int page_referenced(struct page *, int is_locked,
> > + A  A  A  A  A  A  A  A  A  A  A  struct mem_cgroup *cnt, unsigned long *vm_flags);
> > A int try_to_unmap(struct page *, int ignore_refs);
> >
> > A /*
> > @@ -128,7 +129,7 @@ int page_wrprotect(struct page *page, in
> > A #define anon_vma_prepare(vma) A (0)
> > A #define anon_vma_link(vma) A  A  do {} while (0)
> >
> > -#define page_referenced(page,l,cnt) TestClearPageReferenced(page)
> > +#define page_referenced(page, locked, cnt, flags) TestClearPageReferenced(page)
> > A #define try_to_unmap(page, refs) SWAP_FAIL
> >
> > A static inline int page_mkclean(struct page *page)
> > --- linux.orig/mm/rmap.c
> > +++ linux/mm/rmap.c
> > @@ -333,7 +333,8 @@ static int page_mapped_in_vma(struct pag
> > A * repeatedly from either page_referenced_anon or page_referenced_file.
> > A */
> > A static int page_referenced_one(struct page *page,
> > - A  A  A  struct vm_area_struct *vma, unsigned int *mapcount)
> > + A  A  A  A  A  A  A  A  A  A  A  A  A  A  A struct vm_area_struct *vma,
> > + A  A  A  A  A  A  A  A  A  A  A  A  A  A  A unsigned int *mapcount)
> > A {
> > A  A  A  A struct mm_struct *mm = vma->vm_mm;
> > A  A  A  A unsigned long address;
> > @@ -385,7 +386,8 @@ out:
> > A }
> >
> > A static int page_referenced_anon(struct page *page,
> > - A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  struct mem_cgroup *mem_cont)
> > + A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  struct mem_cgroup *mem_cont,
> > + A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  unsigned long *vm_flags)
> > A {
> > A  A  A  A unsigned int mapcount;
> > A  A  A  A struct anon_vma *anon_vma;
> > @@ -406,6 +408,7 @@ static int page_referenced_anon(struct p
> > A  A  A  A  A  A  A  A if (mem_cont && !mm_match_cgroup(vma->vm_mm, mem_cont))
> > A  A  A  A  A  A  A  A  A  A  A  A continue;
> > A  A  A  A  A  A  A  A referenced += page_referenced_one(page, vma, &mapcount);
> > + A  A  A  A  A  A  A  *vm_flags |= vma->vm_flags;
> 
> Sometime this vma don't contain the anon page.
> That's why we need page_check_address.
> For such a case, wrong *vm_flag cause be harmful to reclaim.
> It can be happen in your first class citizen patch, I think.

Yes I'm aware of that - the VMA area covers that page, but have no pte
actually installed for that page. That should be OK - the presentation
of such VMA is a good indication of it being some executable text.

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

  reply	other threads:[~2009-05-08 12:16 UTC|newest]

Thread overview: 168+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20090428044426.GA5035@eskimo.com>
2009-04-28  5:35 ` Swappiness vs. mmap() and interactive response KOSAKI Motohiro
2009-04-28  6:36   ` Elladan
2009-04-28  6:52     ` KOSAKI Motohiro
2009-04-28  7:26       ` Elladan
2009-04-28  7:44         ` KOSAKI Motohiro
2009-04-28  7:48   ` Peter Zijlstra
2009-04-28  7:58     ` Balbir Singh
2009-04-28  8:11       ` Peter Zijlstra
2009-04-28  8:23         ` KAMEZAWA Hiroyuki
2009-04-28  8:25         ` Balbir Singh
2009-04-28  8:03     ` KOSAKI Motohiro
2009-04-28  9:09     ` Wu Fengguang
2009-04-28  9:26       ` Wu Fengguang
2009-04-28 12:08       ` Theodore Tso
2009-04-29  5:51         ` KOSAKI Motohiro
2009-04-29  6:34           ` Andrew Morton
2009-04-29  7:47             ` KOSAKI Motohiro
2009-04-30  4:14             ` Elladan
2009-04-30  4:43               ` Andrew Morton
2009-04-30  4:55                 ` KOSAKI Motohiro
2009-04-30  4:55                 ` Elladan
2009-04-29  7:48           ` KOSAKI Motohiro
2009-04-30 11:59           ` KOSAKI Motohiro
2009-04-30 13:46             ` Elladan
2009-05-06 11:04             ` KOSAKI Motohiro
2009-04-28 15:28   ` Rik van Riel
2009-04-28 23:29 ` [PATCH] vmscan: evict use-once pages first Rik van Riel
2009-04-29  3:36   ` Elladan
2009-04-29 17:06     ` Christoph Hellwig
2009-04-29  6:42   ` Peter Zijlstra
2009-04-29 13:30     ` Rik van Riel
2009-04-29 15:47     ` [PATCH] vmscan: evict use-once pages first (v2) Rik van Riel
2009-04-29 16:07       ` KOSAKI Motohiro
2009-04-29 16:18         ` Rik van Riel
2009-04-29 17:14         ` [PATCH] vmscan: evict use-once pages first (v3) Rik van Riel
2009-04-30  0:39           ` KOSAKI Motohiro
2009-04-30  8:10           ` Johannes Weiner
2009-05-01 22:32           ` Andrew Morton
2009-05-01 23:05             ` Rik van Riel
2009-05-01 23:25               ` Andrew Morton
2009-05-03  1:28                 ` Wu Fengguang
2009-05-03  1:15           ` Wu Fengguang
2009-05-03  1:33             ` Rik van Riel
2009-05-03  1:46               ` Wu Fengguang
2009-04-29 16:10       ` [PATCH] vmscan: evict use-once pages first (v2) Peter Zijlstra
2009-04-30  7:20       ` Elladan
2009-04-30 13:08         ` Rik van Riel
2009-04-30 14:00           ` Elladan
2009-05-01  0:45         ` Andrew Morton
2009-05-01  0:59           ` Rik van Riel
2009-05-01  1:13             ` Andrew Morton
2009-05-01  1:50               ` Rik van Riel
2009-05-01  2:54                 ` Andrew Morton
2009-05-01 14:05                   ` Rik van Riel
2009-05-01 18:04                     ` Ray Lee
2009-05-01 19:34                       ` Rik van Riel
2009-05-01 19:44                         ` Ray Lee
2009-05-01 20:08                           ` Rik van Riel
2009-05-01 20:17                         ` Elladan
2009-05-01 19:35                     ` Andrew Morton
2009-05-01 20:05                       ` Rik van Riel
2009-05-01 20:45                         ` Andrew Morton
2009-05-01 21:46                           ` Rik van Riel
2009-05-03  3:15                       ` Wu Fengguang
2009-05-03  3:24                         ` Rik van Riel
2009-05-03  3:43                           ` Wu Fengguang
2009-05-04 10:23                         ` Peter Zijlstra
2009-05-07 12:11                           ` [PATCH -mm] vmscan: make mapped executable pages the first class citizen Wu Fengguang
2009-05-07 13:39                             ` Christoph Lameter
2009-05-07 14:15                               ` Peter Zijlstra
2009-05-07 14:18                                 ` Christoph Lameter
2009-05-07 14:38                                   ` Peter Zijlstra
2009-05-07 15:36                                     ` Christoph Lameter
2009-05-07 15:59                                       ` Rik van Riel
2009-05-07 15:06                                   ` Rik van Riel
2009-05-07 16:00                                   ` Lee Schermerhorn
2009-05-07 16:32                                     ` Christoph Lameter
2009-05-07 17:11                                       ` Rik van Riel
2009-05-08  3:40                                         ` Elladan
2009-05-08 16:04                                           ` Rik van Riel
2009-05-09  4:04                                             ` Elladan
2009-05-08 17:18                                           ` Christoph Lameter
2009-05-09 10:20                                             ` KOSAKI Motohiro
2009-05-08 17:37                                           ` Alan Cox
2009-05-07 15:10                             ` Johannes Weiner
2009-05-07 15:17                               ` Peter Zijlstra
2009-05-07 15:21                                 ` Rik van Riel
2009-05-08  3:30                                 ` Wu Fengguang
2009-05-08  4:17                                 ` [RFC][PATCH] vmscan: report vm_flags in page_referenced() Wu Fengguang
2009-05-08 12:09                                   ` Minchan Kim
2009-05-08 12:15                                     ` Wu Fengguang [this message]
2009-05-08 14:01                                       ` Minchan Kim
2009-05-09  6:56                                         ` Wu Fengguang
2009-05-10 23:45                                           ` Minchan Kim
2009-05-17 11:25                                             ` Wu Fengguang
2009-05-07 20:44                               ` [PATCH -mm] vmscan: make mapped executable pages the first class citizen Andrew Morton
2009-05-08  8:16                                 ` Wu Fengguang
2009-05-08  8:28                                   ` Wu Fengguang
2009-05-08 19:58                                   ` Andrew Morton
2009-05-08 22:00                                     ` Alan Cox
2009-05-08 22:15                                       ` Andrew Morton
2009-05-08 22:53                                         ` Elladan
2009-05-08 22:20                                       ` Rik van Riel
2009-05-10  8:59                                       ` KOSAKI Motohiro
2009-05-10  9:07                                         ` Peter Zijlstra
2009-05-10  9:35                                           ` Wu Fengguang
2009-05-10 10:06                                             ` KOSAKI Motohiro
2009-05-10  9:36                                           ` KOSAKI Motohiro
2009-05-10 13:45                                             ` Alan Cox
2009-05-10 13:56                                               ` KOSAKI Motohiro
2009-05-10 14:51                                               ` Rik van Riel
2009-05-10 14:59                                                 ` KOSAKI Motohiro
2009-05-10 20:13                                                 ` Alan Cox
2009-05-10 20:37                                                   ` Rik van Riel
2009-05-10 21:23                                                     ` Arjan van de Ven
2009-05-11 10:03                                                       ` Johannes Weiner
2009-05-10 21:29                                                     ` Alan Cox
2009-05-10  9:20                                         ` Wu Fengguang
2009-05-10  9:29                                           ` KOSAKI Motohiro
2009-05-10 10:03                                             ` Wu Fengguang
2009-05-10 10:15                                               ` KOSAKI Motohiro
2009-05-10 11:21                                                 ` Wu Fengguang
2009-05-10 11:39                                                   ` KOSAKI Motohiro
2009-05-10 11:44                                                     ` Wu Fengguang
2009-05-10 12:19                                                       ` Peter Zijlstra
2009-05-10 12:39                                                         ` KOSAKI Motohiro
2009-05-10 13:17                                                           ` Peter Zijlstra
2009-05-12  2:50                                     ` Wu Fengguang
2009-05-12  4:35                                       ` Wu Fengguang
2009-05-12 13:20                                       ` Rik van Riel
2009-05-16  9:26                                         ` Wu Fengguang
2009-05-12  2:51                                     ` [PATCH -mm] vmscan: report vm_flags in page_referenced() Wu Fengguang
2009-05-12  6:23                                       ` Peter Zijlstra
2009-05-12  6:44                                         ` Minchan Kim
2009-05-12 11:44                                           ` Wu Fengguang
2009-05-12  2:52                                     ` [PATCH -mm] vmscan: make mapped executable pages the first class citizen Wu Fengguang
2009-05-12  3:00                                       ` KOSAKI Motohiro
2009-05-12 20:54                                         ` [PATCH -mm] vmscan: protect a fraction of file backed mapped pages from reclaim Christoph Lameter
2009-05-12 17:06                                           ` Rik van Riel
2009-05-12 21:20                                             ` Christoph Lameter
2009-05-12 17:39                                               ` Rik van Riel
2009-05-12 22:02                                                 ` Christoph Lameter
2009-05-12 20:17                                                   ` Rik van Riel
2009-05-12 20:26                                                     ` Christoph Lameter
2009-05-13  0:45                                           ` KOSAKI Motohiro
2009-05-14 20:14                                             ` Christoph Lameter
2009-05-14 23:28                                               ` KOSAKI Motohiro
2009-05-14 23:42                                                 ` Rik van Riel
2009-05-15 18:09                                                 ` Christoph Lameter
2009-05-16  8:54                                               ` Wu Fengguang
2009-05-12  8:17                                       ` [PATCH -mm] vmscan: make mapped executable pages the first class citizen Minchan Kim
2009-05-12  2:53                                     ` [PATCH -mm] vmscan: merge duplicate code in shrink_active_list() Wu Fengguang
2009-05-12  2:58                                       ` KOSAKI Motohiro
2009-05-12  3:03                                         ` Wu Fengguang
2009-05-12  7:26                                       ` Minchan Kim
2009-05-12 11:48                                         ` Wu Fengguang
2009-05-12 11:57                                           ` Minchan Kim
2009-05-12 13:32                                           ` Rik van Riel
2009-05-16  9:30                                             ` Wu Fengguang
2009-05-08  3:02                               ` [PATCH -mm] vmscan: make mapped executable pages the first class citizen Wu Fengguang
2009-05-08  7:30                                 ` Minchan Kim
2009-05-08  8:09                                   ` Wu Fengguang
2009-05-08  9:34                                     ` Minchan Kim
2009-05-08 14:25                                       ` Christoph Lameter
2009-05-08 14:34                                         ` Rik van Riel
2009-05-08 17:41                                         ` KOSAKI Motohiro
2009-05-04  8:04                       ` [PATCH] vmscan: evict use-once pages first (v2) Peter Zijlstra
2009-05-01  3:09           ` Elladan

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=20090508121549.GA17077@localhost \
    --to=fengguang.wu@intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=cl@linux-foundation.org \
    --cc=elladan@eskimo.com \
    --cc=hannes@cmpxchg.org \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=minchan.kim@gmail.com \
    --cc=npiggin@suse.de \
    --cc=peterz@infradead.org \
    --cc=riel@redhat.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 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).