aboutsummaryrefslogtreecommitdiffstats
path: root/mm/vmscan.c
diff options
context:
space:
mode:
authorChristoph Lameter <clameter@engr.sgi.com>2006-02-01 06:05:34 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-02-01 11:53:16 -0500
commit1b2ffb7896ad46067f5b9ebf7de1891d74a4cdef (patch)
treea8f257639d4041bf0e7d61eda3fb72f2eb69f4bc /mm/vmscan.c
parent2a11ff06d7d12be5d1bbcf592fff649b45ac2388 (diff)
[PATCH] Zone reclaim: Allow modification of zone reclaim behavior
In some situations one may want zone_reclaim to behave differently. For example a process writing large amounts of memory will spew unto other nodes to cache the writes if many pages in a zone become dirty. This may impact the performance of processes running on other nodes. Allowing writes during reclaim puts a stop to that behavior and throttles the process by restricting the pages to the local zone. Similarly one may want to contain processes to local memory by enabling regular swap behavior during zone_reclaim. Off node memory allocation can then be controlled through memory policies and cpusets. Signed-off-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r--mm/vmscan.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 8760a4abfa1f..9e2ef3624d77 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1592,6 +1592,11 @@ module_init(kswapd_init)
1592 */ 1592 */
1593int zone_reclaim_mode __read_mostly; 1593int zone_reclaim_mode __read_mostly;
1594 1594
1595#define RECLAIM_OFF 0
1596#define RECLAIM_ZONE (1<<0) /* Run shrink_cache on the zone */
1597#define RECLAIM_WRITE (1<<1) /* Writeout pages during reclaim */
1598#define RECLAIM_SWAP (1<<2) /* Swap pages out during reclaim */
1599
1595/* 1600/*
1596 * Mininum time between zone reclaim scans 1601 * Mininum time between zone reclaim scans
1597 */ 1602 */
@@ -1630,8 +1635,8 @@ int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
1630 if (!cpus_empty(mask) && node_id != numa_node_id()) 1635 if (!cpus_empty(mask) && node_id != numa_node_id())
1631 return 0; 1636 return 0;
1632 1637
1633 sc.may_writepage = 0; 1638 sc.may_writepage = !!(zone_reclaim_mode & RECLAIM_WRITE);
1634 sc.may_swap = 0; 1639 sc.may_swap = !!(zone_reclaim_mode & RECLAIM_SWAP);
1635 sc.nr_scanned = 0; 1640 sc.nr_scanned = 0;
1636 sc.nr_reclaimed = 0; 1641 sc.nr_reclaimed = 0;
1637 sc.priority = ZONE_RECLAIM_PRIORITY + 1; 1642 sc.priority = ZONE_RECLAIM_PRIORITY + 1;