mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Rik van Riel <riel@redhat.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, lee.schermerhorn@hp.com,
	kosaki.motohiro@jp.fujitsu.com
Subject: Re: [PATCH -mm 07/25] second chance replacement for anonymous pages
Date: Sun, 8 Jun 2008 11:04:12 -0400	[thread overview]
Message-ID: <20080608110412.56126b2d@bree.surriel.com> (raw)
In-Reply-To: <20080606180443.43f782e2.akpm@linux-foundation.org>

On Fri, 6 Jun 2008 18:04:43 -0700
Andrew Morton <akpm@linux-foundation.org> wrote:

> > To keep the maximum amount of necessary work reasonable, we scale the
> > active to inactive ratio with the size of memory, using the formula
> > active:inactive ratio = sqrt(memory in GB * 10).
> 
> Should be scaled by PAGE_SIZE?

I suspect the value does not matter all that much.  It is meant to
make the number of inactive anon pages scale sub-linearly with the
size of memory in the system, so anon pages stay on the inactive
list long enough to get referenced again, while limiting the total
number of pages the VM needs to scan to something hopefully reasonable.

This formula has worked well in our testing, but maybe wider testing
in -mm will show us it needs to be tweaked.  Too early to tell whether
scaling by PAGE_SIZE will be needed at all.
 
> > +static inline int inactive_anon_low(struct zone *zone)
> > +{
> > +	unsigned long active, inactive;
> > +
> > +	active = zone_page_state(zone, NR_ACTIVE_ANON);
> > +	inactive = zone_page_state(zone, NR_INACTIVE_ANON);
> > +
> > +	if (inactive * zone->inactive_ratio < active)
> > +		return 1;
> > +
> > +	return 0;
> > +}
> 
> inactive_anon_low: "number of inactive anonymous pages which are in lowmem"?
> 
> Nope.
> 
> Needs a comment.  And maybe a better name, like inactive_anon_is_low. 
> Although making the return type a bool kind-of does that.

Added a comment and renamed the function.

> > +	/*
> > +	 * The ratio of active to inactive pages.
> > +	 */
> > +	unsigned int inactive_ratio;
> 
> That comment needs a lot of help please.  For a start, it's plain wrong
> - inactive_ratio would need to be a float to be able to record that ratio.
> 
> The comment should describe the units too.
.
Commented the hell out of the inactive_ratio stuff :)

> OK, so inactive_ratio is an integer 1 ..  N which determines our target
> number of inactive pages according to the formula
> 
> 	nr_inactive = nr_active / inactive_ratio
> 
> yes?
> 
> Can nr_inactive get larger than this?  I assume so.  I guess that
> doesn't matter much.  Except the problems which you're trying to sovle
> here can reoccur.   What would I need to do to trigger that?

All new anon pages start out on the active list.

The only way you could trigger this problem is by swapping a lot
of memory out through allocation of new memory, then freeing that
new memory and swapping the old memory back in.

That can only happen with the "add newly swapped in pages to the 
inactive list" patch applied, which is why that patch may need some
wider exposure in -mm.

It has not been problematic in our tests so far.
 
> >  long vm_total_pages;	/* The total number of pages which the VM controls */
> >  
> >  static LIST_HEAD(shrinker_list);
> > @@ -1008,7 +1008,7 @@ static inline int zone_is_near_oom(struc
> >  static void shrink_active_list(unsigned long nr_pages, struct zone *zone,
> >  			struct scan_control *sc, int priority, int file)
> >  {
> > -	unsigned long pgmoved;
> > +	unsigned long pgmoved = 0;
> >  	int pgdeactivate = 0;
> >  	unsigned long pgscanned;
> >  	LIST_HEAD(l_hold);	/* The pages which were snipped off */
> > @@ -1036,17 +1036,32 @@ static void shrink_active_list(unsigned 
> >  		__mod_zone_page_state(zone, NR_ACTIVE_ANON, -pgmoved);
> >  	spin_unlock_irq(&zone->lru_lock);
> >  
> > +	pgmoved = 0;
> 
> didn't we just do that?

pgmoved was used in a call above.  I have gotten rid of the top
initialization instead, since it's assigned the return value from
a function.

> >  	while (!list_empty(&l_hold)) {
> >  		cond_resched();
> >  		page = lru_to_page(&l_hold);
> >  		list_del(&page->lru);
> > -		if (page_referenced(page, 0, sc->mem_cgroup))
> > -			list_add(&page->lru, &l_active);
> > -		else
> > +		if (page_referenced(page, 0, sc->mem_cgroup)) {
> > +			if (file) {
> > +				/* Referenced file pages stay active. */
> > +				list_add(&page->lru, &l_active);
> > +			} else {
> > +				/* Anonymous pages always get deactivated. */
> 
> hm.  That's going to make the machine swap like hell.  I guess I don't
> understand all this yet.

The file pages live on a separate LRU from the anon pages.  The anon
LRU will generally be scanned much slower than the file LRU, which
makes the always deactivation harmless.

> > +				list_add(&page->lru, &l_inactive);
> > +				pgmoved++;
> > +			}
> > +		} else
> >  			list_add(&page->lru, &l_inactive);
> >  	}
> >  
> >  	/*
> > +	 * Count the referenced anon pages as rotated, to balance pageout
> > +	 * scan pressure between file and anonymous pages in get_sacn_ratio.
> 
> tpyo

Fixed.

-- 
All rights reversed.

  parent reply	other threads:[~2008-06-08 15:04 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-06 20:28 [PATCH -mm 00/25] VM pageout scalability improvements (V10) Rik van Riel, Rik van Riel
2008-06-06 20:28 ` [PATCH -mm 01/25] move isolate_lru_page() to vmscan.c Rik van Riel, Rik van Riel
2008-06-06 20:28 ` [PATCH -mm 02/25] Use an indexed array for LRU variables Rik van Riel, Rik van Riel
2008-06-07  1:04   ` Andrew Morton
2008-06-07  5:43     ` KOSAKI Motohiro
2008-06-07 14:47       ` Rik van Riel
2008-06-08 11:22         ` KOSAKI Motohiro
2008-06-07 18:42     ` Rik van Riel
2008-06-06 20:28 ` [PATCH -mm 03/25] use an array for the LRU pagevecs Rik van Riel, Rik van Riel
2008-06-06 20:28 ` [PATCH -mm 04/25] free swap space on swap-in/activation Rik van Riel, Rik van Riel
2008-06-07  1:04   ` Andrew Morton
2008-06-07 19:56     ` Rik van Riel
2008-06-09  2:14     ` MinChan Kim
2008-06-09  2:42       ` Rik van Riel
2008-06-09 13:38       ` KOSAKI Motohiro
2008-06-10  2:30         ` MinChan Kim
2008-06-06 20:28 ` [PATCH -mm 05/25] define page_file_cache() function Rik van Riel, Rik van Riel
2008-06-07  1:04   ` Andrew Morton
2008-06-07 23:38     ` Rik van Riel
2008-06-06 20:28 ` [PATCH -mm 06/25] split LRU lists into anon & file sets Rik van Riel, Rik van Riel
2008-06-07  1:04   ` Andrew Morton
2008-06-07  1:22     ` Rik van Riel
2008-06-07  1:52       ` Andrew Morton
2008-06-06 20:28 ` [PATCH -mm 07/25] second chance replacement for anonymous pages Rik van Riel, Rik van Riel
2008-06-07  1:04   ` Andrew Morton
2008-06-07  6:03     ` KOSAKI Motohiro
2008-06-07  6:43       ` Andrew Morton
2008-06-08 15:04     ` Rik van Riel [this message]
2008-06-06 20:28 ` [PATCH -mm 08/25] add some sanity checks to get_scan_ratio Rik van Riel, Rik van Riel
2008-06-07  1:04   ` Andrew Morton
2008-06-08 15:11     ` Rik van Riel
2008-06-06 20:28 ` [PATCH -mm 09/25] fix pagecache reclaim referenced bit check Rik van Riel, Rik van Riel
2008-06-07  1:04   ` Andrew Morton
2008-06-07  1:08     ` Rik van Riel
2008-06-08 10:02       ` Peter Zijlstra
2008-06-06 20:28 ` [PATCH -mm 10/25] add newly swapped in pages to the inactive list Rik van Riel, Rik van Riel
2008-06-07  1:04   ` Andrew Morton
2008-06-06 20:28 ` [PATCH -mm 11/25] more aggressively use lumpy reclaim Rik van Riel, Rik van Riel
2008-06-07  1:05   ` Andrew Morton
2008-06-06 20:28 ` [PATCH -mm 12/25] pageflag helpers for configed-out flags Rik van Riel, Rik van Riel
2008-06-06 20:28 ` [PATCH -mm 13/25] Noreclaim LRU Infrastructure Rik van Riel, Rik van Riel
2008-06-07  1:05   ` Andrew Morton
2008-06-08 20:34     ` Rik van Riel
2008-06-08 20:57       ` Andrew Morton
2008-06-08 21:32         ` Rik van Riel
2008-06-08 21:43           ` Ray Lee
2008-06-08 23:22           ` Andrew Morton
2008-06-08 23:34             ` Rik van Riel
2008-06-08 23:54               ` Andrew Morton
2008-06-09  0:56                 ` Rik van Riel
2008-06-09  6:10                   ` Andrew Morton
2008-06-09 13:44                     ` Rik van Riel
2008-06-09  2:58                 ` Rik van Riel
2008-06-09  5:44                   ` Andrew Morton
2008-06-10 19:17                 ` Christoph Lameter
2008-06-10 19:37                   ` Rik van Riel
2008-06-10 21:33                     ` Andrew Morton
2008-06-10 21:48                       ` Andi Kleen
2008-06-10 22:05                       ` Dave Hansen
2008-06-11  5:09                       ` Paul Mundt
2008-06-11  6:16                         ` Andrew Morton
2008-06-11  6:29                           ` Paul Mundt
2008-06-11 12:06                           ` Andi Kleen
2008-06-11 14:09                           ` Removing node flags from page->flags was Re: [PATCH -mm 13/25] Noreclaim LRU Infrastructure II Andi Kleen
2008-06-11 19:03                       ` [PATCH -mm 13/25] Noreclaim LRU Infrastructure Andy Whitcroft
2008-06-11 20:52                         ` Andi Kleen
2008-06-11 23:25                         ` Christoph Lameter
2008-06-08 22:03         ` Rik van Riel
2008-06-08 21:07       ` KOSAKI Motohiro
2008-06-10 20:09     ` Rik van Riel
2008-06-06 20:28 ` [PATCH -mm 14/25] Noreclaim LRU Page Statistics Rik van Riel, Rik van Riel
2008-06-06 20:28 ` [PATCH -mm 15/25] Ramfs and Ram Disk pages are non-reclaimable Rik van Riel, Rik van Riel
2008-06-07  1:05   ` Andrew Morton
2008-06-08  4:32     ` Greg KH
2008-06-06 20:28 ` [PATCH -mm 16/25] SHM_LOCKED " Rik van Riel, Rik van Riel
2008-06-07  1:05   ` Andrew Morton
2008-06-07  5:21     ` KOSAKI Motohiro
2008-06-10 21:03     ` Rik van Riel
2008-06-10 21:22       ` Lee Schermerhorn
2008-06-10 21:49         ` Andrew Morton
2008-06-06 20:28 ` [PATCH -mm 17/25] Mlocked Pages " Rik van Riel, Rik van Riel
2008-06-07  1:07   ` Andrew Morton
2008-06-07  5:38     ` KOSAKI Motohiro
2008-06-10  3:31     ` Nick Piggin
2008-06-10 12:50       ` Rik van Riel
2008-06-10 21:14       ` Rik van Riel
2008-06-10 21:43         ` Lee Schermerhorn
2008-06-10 21:57           ` Andrew Morton
2008-06-11 16:01             ` Lee Schermerhorn
2008-06-10 23:48           ` Rik van Riel
2008-06-11 15:29             ` Lee Schermerhorn
2008-06-11  1:00     ` Rik van Riel
2008-06-06 20:28 ` [PATCH -mm 18/25] Downgrade mmap sem while populating mlocked regions Rik van Riel, Rik van Riel
2008-06-06 20:28 ` [PATCH -mm 19/25] Handle mlocked pages during map, remap, unmap Rik van Riel, Rik van Riel
2008-06-06 20:28 ` [PATCH -mm 20/25] Mlocked Pages statistics Rik van Riel, Rik van Riel
2008-06-06 20:28 ` [PATCH -mm 21/25] Cull non-reclaimable pages in fault path Rik van Riel, Rik van Riel
2008-06-06 20:29 ` [PATCH -mm 22/25] Noreclaim and Mlocked pages vm events Rik van Riel, Rik van Riel
2008-06-06 20:29 ` [PATCH -mm 23/25] Noreclaim LRU scan sysctl Rik van Riel, Rik van Riel
2008-06-06 20:29 ` [PATCH -mm 24/25] Mlocked Pages: count attempts to free mlocked page Rik van Riel, Rik van Riel
2008-06-06 20:29 ` [PATCH -mm 25/25] Noreclaim LRU and Mlocked Pages Documentation Rik van Riel, Rik van Riel
2008-06-06 21:02 ` [PATCH -mm 00/25] VM pageout scalability improvements (V10) Andrew Morton
2008-06-06 21:08   ` Rik van Riel

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=20080608110412.56126b2d@bree.surriel.com \
    --to=riel@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=lee.schermerhorn@hp.com \
    --cc=linux-kernel@vger.kernel.org \
    /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

all inboxes | Powered by JetHome®