diff options
author | Christoph Lameter <clameter@engr.sgi.com> | 2006-02-01 06:05:34 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-01 11:53:16 -0500 |
commit | 1b2ffb7896ad46067f5b9ebf7de1891d74a4cdef (patch) | |
tree | a8f257639d4041bf0e7d61eda3fb72f2eb69f4bc /mm/vmscan.c | |
parent | 2a11ff06d7d12be5d1bbcf592fff649b45ac2388 (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.c | 9 |
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 | */ |
1593 | int zone_reclaim_mode __read_mostly; | 1593 | int 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; |