linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Wu Fengguang <fengguang.wu@intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Rik van Riel <riel@redhat.com>,
	elladan@eskimo.com, linux-kernel@vger.kernel.org, tytso@mit.edu,
	kosaki.motohiro@jp.fujitsu.com, linux-mm@kvack.org
Subject: Re: [PATCH] vmscan: evict use-once pages first (v2)
Date: Mon, 04 May 2009 12:23:55 +0200	[thread overview]
Message-ID: <1241432635.7620.4732.camel@twins> (raw)
In-Reply-To: <20090503031539.GC5702@localhost>

On Sun, 2009-05-03 at 11:15 +0800, Wu Fengguang wrote:
> On Fri, May 01, 2009 at 12:35:41PM -0700, Andrew Morton wrote:
> > On Fri, 01 May 2009 10:05:53 -0400
> > Rik van Riel <riel@redhat.com> wrote:
> > 
> > > Andrew Morton wrote:
> > > 
> > > >> When we implement working set protection, we might as well
> > > >> do it for frequently accessed unmapped pages too.  There is
> > > >> no reason to restrict this protection to mapped pages.
> > > > 
> > > > Well.  Except for empirical observation, which tells us that biasing
> > > > reclaim to prefer to retain mapped memory produces a better result.
> > > 
> > > That used to be the case because file-backed and
> > > swap-backed pages shared the same set of LRUs,
> > > while each following a different page reclaim
> > > heuristic!
> > 
> > No, I think it still _is_ the case.  When reclaim is treating mapped
> > and non-mapped pages equally, the end result sucks.  Applications get
> > all laggy and humans get irritated.  It may be that the system was
> > optimised from an overall throughput POV, but the result was
> > *irritating*.
> > 
> > Which led us to prefer to retain mapped pages.  This had nothing at all
> > to do with internal impementation details - it was a design objective
> > based upon empirical observation of system behaviour.
> 
> Heartily Agreed. We shall try hard to protect the running applications.
> 
> Commit 7e9cd484204f(vmscan: fix pagecache reclaim referenced bit check)
> tries to address scalability problem when every page get mapped and
> referenced, so that logic(which lowed the priority of mapped pages)
> could be enabled only on conditions like (priority < DEF_PRIORITY).
> 
> Or preferably we can explicitly protect the mapped executables,
> as illustrated by this patch (a quick prototype).

Ah, nice, this re-instates the young bit for PROT_EXEC pages.
I very much like this.


> Thanks,
> Fengguang
> ---
>  include/linux/pagemap.h |    1 +
>  mm/mmap.c               |    2 ++
>  mm/nommu.c              |    2 ++
>  mm/vmscan.c             |   37 +++++++++++++++++++++++++++++++++++--
>  4 files changed, 40 insertions(+), 2 deletions(-)
> 
> --- linux.orig/include/linux/pagemap.h
> +++ linux/include/linux/pagemap.h
> @@ -25,6 +25,7 @@ enum mapping_flags {
>  #ifdef CONFIG_UNEVICTABLE_LRU
>  	AS_UNEVICTABLE	= __GFP_BITS_SHIFT + 3,	/* e.g., ramdisk, SHM_LOCK */
>  #endif
> +	AS_EXEC		= __GFP_BITS_SHIFT + 4,	/* mapped PROT_EXEC somewhere */
>  };
>  
>  static inline void mapping_set_error(struct address_space *mapping, int error)
> --- linux.orig/mm/mmap.c
> +++ linux/mm/mmap.c
> @@ -1198,6 +1198,8 @@ munmap_back:
>  			goto unmap_and_free_vma;
>  		if (vm_flags & VM_EXECUTABLE)
>  			added_exe_file_vma(mm);
> +		if (vm_flags & VM_EXEC)
> +			set_bit(AS_EXEC, &file->f_mapping->flags);
>  	} else if (vm_flags & VM_SHARED) {
>  		error = shmem_zero_setup(vma);
>  		if (error)
> --- linux.orig/mm/vmscan.c
> +++ linux/mm/vmscan.c
> @@ -1220,6 +1220,7 @@ static void shrink_active_list(unsigned 
>  	int pgdeactivate = 0;
>  	unsigned long pgscanned;
>  	LIST_HEAD(l_hold);	/* The pages which were snipped off */
> +	LIST_HEAD(l_active);
>  	LIST_HEAD(l_inactive);
>  	struct page *page;
>  	struct pagevec pvec;
> @@ -1259,8 +1260,15 @@ static void shrink_active_list(unsigned 
>  
>  		/* page_referenced clears PageReferenced */
>  		if (page_mapping_inuse(page) &&
> -		    page_referenced(page, 0, sc->mem_cgroup))
> +		    page_referenced(page, 0, sc->mem_cgroup)) {
> +			struct address_space *mapping = page_mapping(page);
> +
>  			pgmoved++;
> +			if (mapping && test_bit(AS_EXEC, &mapping->flags)) {
> +				list_add(&page->lru, &l_active);
> +				continue;
> +			}
> +		}
>  
>  		list_add(&page->lru, &l_inactive);
>  	}
> @@ -1269,7 +1277,6 @@ static void shrink_active_list(unsigned 
>  	 * Move the pages to the [file or anon] inactive list.
>  	 */
>  	pagevec_init(&pvec, 1);
> -	lru = LRU_BASE + file * LRU_FILE;
>  
>  	spin_lock_irq(&zone->lru_lock);
>  	/*
> @@ -1281,6 +1288,7 @@ static void shrink_active_list(unsigned 
>  	reclaim_stat->recent_rotated[!!file] += pgmoved;
>  
>  	pgmoved = 0;
> +	lru = LRU_BASE + file * LRU_FILE;
>  	while (!list_empty(&l_inactive)) {
>  		page = lru_to_page(&l_inactive);
>  		prefetchw_prev_lru_page(page, &l_inactive, flags);
> @@ -1305,6 +1313,31 @@ static void shrink_active_list(unsigned 
>  	}
>  	__mod_zone_page_state(zone, NR_LRU_BASE + lru, pgmoved);
>  	pgdeactivate += pgmoved;
> +
> +	pgmoved = 0;
> +	lru = LRU_ACTIVE + file * LRU_FILE;
> +	while (!list_empty(&l_active)) {
> +		page = lru_to_page(&l_active);
> +		prefetchw_prev_lru_page(page, &l_active, flags);
> +		VM_BUG_ON(PageLRU(page));
> +		SetPageLRU(page);
> +		VM_BUG_ON(!PageActive(page));
> +
> +		list_move(&page->lru, &zone->lru[lru].list);
> +		mem_cgroup_add_lru_list(page, lru);
> +		pgmoved++;
> +		if (!pagevec_add(&pvec, page)) {
> +			__mod_zone_page_state(zone, NR_LRU_BASE + lru, pgmoved);
> +			pgmoved = 0;
> +			spin_unlock_irq(&zone->lru_lock);
> +			if (buffer_heads_over_limit)
> +				pagevec_strip(&pvec);
> +			__pagevec_release(&pvec);
> +			spin_lock_irq(&zone->lru_lock);
> +		}
> +	}
> +	__mod_zone_page_state(zone, NR_LRU_BASE + lru, pgmoved);
> +
>  	__count_zone_vm_events(PGREFILL, zone, pgscanned);
>  	__count_vm_events(PGDEACTIVATE, pgdeactivate);
>  	spin_unlock_irq(&zone->lru_lock);
> --- linux.orig/mm/nommu.c
> +++ linux/mm/nommu.c
> @@ -1220,6 +1220,8 @@ unsigned long do_mmap_pgoff(struct file 
>  			added_exe_file_vma(current->mm);
>  			vma->vm_mm = current->mm;
>  		}
> +		if (vm_flags & VM_EXEC)
> +			set_bit(AS_EXEC, &file->f_mapping->flags);
>  	}
>  
>  	down_write(&nommu_region_sem);

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

  parent reply	other threads:[~2009-05-04 10:23 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 [this message]
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
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=1241432635.7620.4732.camel@twins \
    --to=peterz@infradead.org \
    --cc=akpm@linux-foundation.org \
    --cc=elladan@eskimo.com \
    --cc=fengguang.wu@intel.com \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.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).