]> git.hungrycats.org Git - linux/commitdiff
[PATCH] vm: balance inactive zone refill rates
authorAndrew Morton <akpm@osdl.org>
Fri, 12 Mar 2004 00:25:36 +0000 (16:25 -0800)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Fri, 12 Mar 2004 00:25:36 +0000 (16:25 -0800)
The current refill logic in refill_inactive_zone() takes an arbitrarily large
number of pages and chops it down to SWAP_CLUSTER_MAX*4, regardless of the
size of the zone.

This has the effect of reducing the amount of refilling of large zones
proportionately much more than of small zones.

We made this change in may 2003 and I'm damned if I remember why.  let's put
it back so we don't truncate the refill count and see what happens.

mm/vmscan.c

index 65824df165e3f9423ac841977d21bb6958a5e151..7768aca74d1dac48c3dbb7ecbd5ebf1c0b6da26a 100644 (file)
@@ -756,17 +756,10 @@ shrink_zone(struct zone *zone, int max_scan, unsigned int gfp_mask,
         */
        ratio = (unsigned long)SWAP_CLUSTER_MAX * zone->nr_active /
                                ((zone->nr_inactive | 1) * 2);
+
        atomic_add(ratio+1, &zone->nr_scan_active);
        count = atomic_read(&zone->nr_scan_active);
        if (count >= SWAP_CLUSTER_MAX) {
-               /*
-                * Don't try to bring down too many pages in one attempt.
-                * If this fails, the caller will increase `priority' and
-                * we'll try again, with an increased chance of reclaiming
-                * mapped memory.
-                */
-               if (count > SWAP_CLUSTER_MAX * 4)
-                       count = SWAP_CLUSTER_MAX * 4;
                atomic_set(&zone->nr_scan_active, 0);
                refill_inactive_zone(zone, count, ps);
        }