diff options
author | KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> | 2008-02-07 03:14:35 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-07 11:42:22 -0500 |
commit | cc38108e1ba7f3b9e12b82d0236fa3730c2e0439 (patch) | |
tree | 6e51d191006b5db840c1eee659c372a2de7f85a8 /mm/memcontrol.c | |
parent | 6c48a1d040a9a9eaa4acdd7d4cb3885e04bf8413 (diff) |
per-zone and reclaim enhancements for memory controller: calculate the number of pages to be scanned per cgroup
Define function for calculating the number of scan target on each Zone/LRU.
Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Balbir Singh <balbir@linux.vnet.ibm.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Herbert Poetzl <herbert@13thfloor.at>
Cc: Kirill Korotaev <dev@sw.ru>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: Paul Menage <menage@google.com>
Cc: Pavel Emelianov <xemul@openvz.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
Cc: Rik van Riel <riel@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r-- | mm/memcontrol.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index f8a6a39c440d..40cdba68de34 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -471,6 +471,39 @@ void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem, int priority) | |||
471 | mem->prev_priority = priority; | 471 | mem->prev_priority = priority; |
472 | } | 472 | } |
473 | 473 | ||
474 | /* | ||
475 | * Calculate # of pages to be scanned in this priority/zone. | ||
476 | * See also vmscan.c | ||
477 | * | ||
478 | * priority starts from "DEF_PRIORITY" and decremented in each loop. | ||
479 | * (see include/linux/mmzone.h) | ||
480 | */ | ||
481 | |||
482 | long mem_cgroup_calc_reclaim_active(struct mem_cgroup *mem, | ||
483 | struct zone *zone, int priority) | ||
484 | { | ||
485 | long nr_active; | ||
486 | int nid = zone->zone_pgdat->node_id; | ||
487 | int zid = zone_idx(zone); | ||
488 | struct mem_cgroup_per_zone *mz = mem_cgroup_zoneinfo(mem, nid, zid); | ||
489 | |||
490 | nr_active = MEM_CGROUP_ZSTAT(mz, MEM_CGROUP_ZSTAT_ACTIVE); | ||
491 | return (nr_active >> priority); | ||
492 | } | ||
493 | |||
494 | long mem_cgroup_calc_reclaim_inactive(struct mem_cgroup *mem, | ||
495 | struct zone *zone, int priority) | ||
496 | { | ||
497 | long nr_inactive; | ||
498 | int nid = zone->zone_pgdat->node_id; | ||
499 | int zid = zone_idx(zone); | ||
500 | struct mem_cgroup_per_zone *mz = mem_cgroup_zoneinfo(mem, nid, zid); | ||
501 | |||
502 | nr_inactive = MEM_CGROUP_ZSTAT(mz, MEM_CGROUP_ZSTAT_INACTIVE); | ||
503 | |||
504 | return (nr_inactive >> priority); | ||
505 | } | ||
506 | |||
474 | unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, | 507 | unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, |
475 | struct list_head *dst, | 508 | struct list_head *dst, |
476 | unsigned long *scanned, int order, | 509 | unsigned long *scanned, int order, |