aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Piggin <nickpiggin@yahoo.com.au>2005-11-13 19:06:45 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-11-13 21:14:12 -0500
commit669ed17521b9b78cdbeac8a53c30599aca9527ce (patch)
tree9a4c037120b7a85943c37115be9f4a6eacb28874
parent2d6c666e8704cf06267f29a4fa3d2cf823469c38 (diff)
[PATCH] mm: highmem watermarks
The pages_high - pages_low and pages_low - pages_min deltas are the asynch reclaim watermarks. As such, the should be in the same ratios as any other zone for highmem zones. It is the pages_min - 0 delta which is the PF_MEMALLOC reserve, and this is the region that isn't very useful for highmem. This patch ensures highmem systems have similar characteristics as non highmem ones with the same amount of memory, and also that highmem zones get similar reclaim pressures to other zones. Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--mm/page_alloc.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 845b91749a42..3c5cf664abd2 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -2397,13 +2397,18 @@ void setup_per_zone_pages_min(void)
2397 } 2397 }
2398 2398
2399 for_each_zone(zone) { 2399 for_each_zone(zone) {
2400 unsigned long tmp;
2400 spin_lock_irqsave(&zone->lru_lock, flags); 2401 spin_lock_irqsave(&zone->lru_lock, flags);
2402 tmp = (pages_min * zone->present_pages) / lowmem_pages;
2401 if (is_highmem(zone)) { 2403 if (is_highmem(zone)) {
2402 /* 2404 /*
2403 * Often, highmem doesn't need to reserve any pages. 2405 * __GFP_HIGH and PF_MEMALLOC allocations usually don't
2404 * But the pages_min/low/high values are also used for 2406 * need highmem pages, so cap pages_min to a small
2405 * batching up page reclaim activity so we need a 2407 * value here.
2406 * decent value here. 2408 *
2409 * The (pages_high-pages_low) and (pages_low-pages_min)
2410 * deltas controls asynch page reclaim, and so should
2411 * not be capped for highmem.
2407 */ 2412 */
2408 int min_pages; 2413 int min_pages;
2409 2414
@@ -2414,19 +2419,15 @@ void setup_per_zone_pages_min(void)
2414 min_pages = 128; 2419 min_pages = 128;
2415 zone->pages_min = min_pages; 2420 zone->pages_min = min_pages;
2416 } else { 2421 } else {
2417 /* if it's a lowmem zone, reserve a number of pages 2422 /*
2423 * If it's a lowmem zone, reserve a number of pages
2418 * proportionate to the zone's size. 2424 * proportionate to the zone's size.
2419 */ 2425 */
2420 zone->pages_min = (pages_min * zone->present_pages) / 2426 zone->pages_min = tmp;
2421 lowmem_pages;
2422 } 2427 }
2423 2428
2424 /* 2429 zone->pages_low = zone->pages_min + tmp / 4;
2425 * When interpreting these watermarks, just keep in mind that: 2430 zone->pages_high = zone->pages_min + tmp / 2;
2426 * zone->pages_min == (zone->pages_min * 4) / 4;
2427 */
2428 zone->pages_low = (zone->pages_min * 5) / 4;
2429 zone->pages_high = (zone->pages_min * 6) / 4;
2430 spin_unlock_irqrestore(&zone->lru_lock, flags); 2431 spin_unlock_irqrestore(&zone->lru_lock, flags);
2431 } 2432 }
2432} 2433}