linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Rik van Riel <riel@redhat.com>
To: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [patch 05/19] split LRU lists into anon & file sets
Date: Wed, 6 Feb 2008 19:35:12 -0500	[thread overview]
Message-ID: <20080206193512.77b5f21f@bree.surriel.com> (raw)
In-Reply-To: <20080130175439.1AFD.KOSAKI.MOTOHIRO@jp.fujitsu.com>

On Wed, 30 Jan 2008 17:57:54 +0900
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> wrote:

> I found number of scan pages calculation bug.

My latest version of get_scan_ratio() works differently, with the
percentages always adding up to 100.  However, your patch gave me
the inspiration to (hopefully) find the bug in my version of the
code.
 
> 1. wrong calculation order

I do not believe my new code has this problem.  Of course, this
is purely due to luck :)

> 2. wrong fraction omission
> 
> 	nr[l] = zone->nr_scan[l] * percent[file] / 100;
> 
> 	when percent is very small,
> 	nr[l] become 0.

This is probably where the problem is.  Kind of.

I believe that the problem is that we scale nr[l] by the percentage,
instead of scaling the amount we add to zone->nr_scan[l] by the
percentage!

> @@ -1409,7 +1410,11 @@ static unsigned long shrink_zone(int pri
>  			 */
>  			zone->nr_scan[l] += (zone_page_state(zone,
>  				NR_INACTIVE_ANON + l) >> priority) + 1;
> -			nr[l] = zone->nr_scan[l] * percent[file] / 100;
> +			nr[l] = (zone->nr_scan[l] * percent[file] / 100) + 1;
> +			nr_max_scan = zone_page_state(zone, NR_INACTIVE_ANON+l);
> +			if (nr[l] > nr_max_scan)
> +				nr[l] = nr_max_scan;
> +
>  			if (nr[l] >= sc->swap_cluster_max)
>  				zone->nr_scan[l] = 0;
>  			else

With the fix below (against my latest tree), we always add at least one
to zone->nr_scan[l] and always make that increment count later on!

I am still recovering from my trip home (thanks to the airline companies
I spent 25 hours travelling, from door to door), so I may not get around
to actually testing this today:

Index: linux-2.6.24-rc6-mm1/mm/vmscan.c
===================================================================
--- linux-2.6.24-rc6-mm1.orig/mm/vmscan.c	2008-02-06 19:23:16.000000000 -0500
+++ linux-2.6.24-rc6-mm1/mm/vmscan.c	2008-02-06 19:22:55.000000000 -0500
@@ -1275,13 +1275,17 @@ static unsigned long shrink_zone(int pri
 	for_each_lru(l) {
 		if (scan_global_lru(sc)) {
 			int file = is_file_lru(l);
+			int scan;
 			/*
 			 * Add one to nr_to_scan just to make sure that the
-			 * kernel will slowly sift through the active list.
+			 * kernel will slowly sift through each list.
 			 */
-			zone->nr_scan[l] += (zone_page_state(zone,
-				NR_INACTIVE_ANON + l) >> priority) + 1;
-			nr[l] = zone->nr_scan[l] * percent[file] / 100;
+			scan = zone_page_state(zone, NR_INACTIVE_ANON + l);
+			scan >>= priority;
+			scan = (scan * percent[file]) / 100;
+
+			zone->nr_scan[l] += scan + 1;
+			nr[l] = zone->nr_scan[l];
 			if (nr[l] >= sc->swap_cluster_max)
 				zone->nr_scan[l] = 0;
 			else

--
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:[~2008-02-07  0:35 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-08 20:59 [patch 00/19] VM pageout scalability improvements Rik van Riel
2008-01-08 20:59 ` [patch 01/19] move isolate_lru_page() to vmscan.c Rik van Riel
2008-01-08 22:03   ` Christoph Lameter
2008-01-08 20:59 ` [patch 02/19] free swap space on swap-in/activation Rik van Riel
2008-01-08 22:10   ` Christoph Lameter
2008-01-08 20:59 ` [patch 03/19] define page_file_cache() function Rik van Riel
2008-01-08 22:18   ` Christoph Lameter
2008-01-08 22:28     ` Rik van Riel
2008-01-09  4:26       ` KAMEZAWA Hiroyuki
2008-01-08 20:59 ` [patch 04/19] Use an indexed array for LRU variables Rik van Riel
2008-01-08 20:59 ` [patch 05/19] split LRU lists into anon & file sets Rik van Riel
2008-01-08 22:22   ` Christoph Lameter
2008-01-08 22:36     ` Rik van Riel
2008-01-08 22:42       ` Christoph Lameter
2008-01-09  2:45         ` Rik van Riel
2008-01-09  4:41   ` KAMEZAWA Hiroyuki
2008-01-10  2:21     ` Balbir Singh
2008-01-10  2:36       ` KAMEZAWA Hiroyuki
2008-01-10  3:26         ` Balbir Singh
2008-01-10  4:23           ` KAMEZAWA Hiroyuki
2008-01-10  2:28   ` KAMEZAWA Hiroyuki
2008-01-10  2:37     ` Rik van Riel
2008-01-11  3:59   ` KOSAKI Motohiro
2008-01-11 15:37     ` Rik van Riel
2008-01-11  6:24   ` KOSAKI Motohiro
2008-01-11 15:42     ` Rik van Riel
2008-01-11 15:59       ` Lee Schermerhorn
2008-01-11 16:15         ` Rik van Riel
2008-01-11 19:51           ` Lee Schermerhorn
2008-01-11 15:50     ` Lee Schermerhorn
2008-01-11 16:06       ` Rik van Riel
2008-01-11  7:35   ` KOSAKI Motohiro
2008-01-11 15:46     ` Rik van Riel
2008-01-14 23:57       ` KOSAKI Motohiro
2008-01-30  3:25   ` KOSAKI Motohiro
2008-01-30  8:57     ` KOSAKI Motohiro
2008-01-30 14:29       ` Lee Schermerhorn
2008-01-31  1:17         ` KOSAKI Motohiro
2008-01-31 10:48           ` Rik van Riel
2008-01-31 10:59             ` KOSAKI Motohiro
2008-02-07  0:35       ` Rik van Riel [this message]
2008-02-07  1:20         ` KOSAKI Motohiro
2008-02-07  1:36           ` Rik van Riel
2008-01-08 20:59 ` [patch 06/19] SEQ replacement for anonymous pages Rik van Riel
2008-01-08 20:59 ` [patch 07/19] (NEW) add some sanity checks to get_scan_ratio Rik van Riel
2008-01-09  4:16   ` KAMEZAWA Hiroyuki
2008-01-09 12:53     ` Rik van Riel
2008-01-08 20:59 ` [patch 08/19] add newly swapped in pages to the inactive list Rik van Riel
2008-01-08 22:28   ` Christoph Lameter
2008-01-08 20:59 ` [patch 09/19] (NEW) more aggressively use lumpy reclaim Rik van Riel
2008-01-08 22:30   ` Christoph Lameter
2008-01-14 15:28     ` Mel Gorman
2008-01-08 20:59 ` [patch 10/19] No Reclaim LRU Infrastructure Rik van Riel
2008-01-11  4:36   ` KOSAKI Motohiro
2008-01-11 15:43     ` Lee Schermerhorn
2008-01-15  0:06       ` KOSAKI Motohiro
2008-01-08 20:59 ` [patch 11/19] Non-reclaimable page statistics Rik van Riel
2008-01-08 20:59 ` [patch 12/19] scan noreclaim list for reclaimable pages Rik van Riel
2008-01-08 20:59 ` [patch 13/19] ramfs pages are non-reclaimable Rik van Riel
2008-01-08 20:59 ` [patch 14/19] SHM_LOCKED pages are nonreclaimable Rik van Riel
2008-01-08 20:59 ` [patch 15/19] non-reclaimable mlocked pages Rik van Riel
2008-01-08 20:59 ` [patch 16/19] mlock vma pages under mmap_sem held for read Rik van Riel
2008-01-08 20:59 ` [patch 17/19] handle mlocked pages during map/unmap and truncate Rik van Riel
2008-01-08 20:59 ` [patch 18/19] account mlocked pages Rik van Riel
2008-01-11 12:51   ` Balbir Singh
2008-01-13  5:18     ` Rik van Riel
2008-01-08 20:59 ` [patch 19/19] cull non-reclaimable anon pages from the LRU at fault time Rik van Riel
2008-01-10  4:39 ` [patch 00/19] VM pageout scalability improvements Mike Snitzer
2008-01-10 15:41   ` Rik van Riel
2008-01-10 16:08     ` Mike Snitzer
2008-01-11 10:41 ` Balbir Singh
2008-01-11 15:38   ` Rik van Riel
2008-01-11 11:47 ` Balbir Singh
2008-01-16  6:17 ` rvr split LRU minor regression ? KOSAKI Motohiro

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=20080206193512.77b5f21f@bree.surriel.com \
    --to=riel@redhat.com \
    --cc=Lee.Schermerhorn@hp.com \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.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;
as well as URLs for NNTP newsgroup(s).