[RFC][PATCH 5/8] memcg soft limit (yet another new design) v1

From: KAMEZAWA Hiroyuki
Date: Fri Mar 27 2009 - 01:11:16 EST


memcg's reclaim routine is designed to ignore locality andplacements and
then, inactive_anon_is_low() function doesn't take "zone" as its argument.

In later soft limit patch, we use "zone" as an arguments.

Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx>
---
Index: mmotm-2.6.29-Mar23/mm/memcontrol.c
===================================================================
--- mmotm-2.6.29-Mar23.orig/mm/memcontrol.c
+++ mmotm-2.6.29-Mar23/mm/memcontrol.c
@@ -561,15 +561,28 @@ void mem_cgroup_record_reclaim_priority(
spin_unlock(&mem->reclaim_param_lock);
}

-static int calc_inactive_ratio(struct mem_cgroup *memcg, unsigned long *present_pages)
+static int calc_inactive_ratio(struct mem_cgroup *memcg,
+ unsigned long *present_pages,
+ struct zone *z)
{
unsigned long active;
unsigned long inactive;
unsigned long gb;
unsigned long inactive_ratio;

- inactive = mem_cgroup_get_local_zonestat(memcg, LRU_INACTIVE_ANON);
- active = mem_cgroup_get_local_zonestat(memcg, LRU_ACTIVE_ANON);
+ if (!z) {
+ inactive = mem_cgroup_get_local_zonestat(memcg,
+ LRU_INACTIVE_ANON);
+ active = mem_cgroup_get_local_zonestat(memcg, LRU_ACTIVE_ANON);
+ } else {
+ int nid = z->zone_pgdat->node_id;
+ int zid = zone_idx(z);
+ struct mem_cgroup_per_zone *mz;
+
+ mz = mem_cgroup_zoneinfo(memcg, nid, zid);
+ inactive = MEM_CGROUP_ZSTAT(mz, LRU_INACTIVE_ANON);
+ active = MEM_CGROUP_ZSTAT(mz, LRU_ACTIVE_ANON);
+ }

gb = (inactive + active) >> (30 - PAGE_SHIFT);
if (gb)
@@ -585,14 +598,14 @@ static int calc_inactive_ratio(struct me
return inactive_ratio;
}

-int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg)
+int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg, struct zone *z)
{
unsigned long active;
unsigned long inactive;
unsigned long present_pages[2];
unsigned long inactive_ratio;

- inactive_ratio = calc_inactive_ratio(memcg, present_pages);
+ inactive_ratio = calc_inactive_ratio(memcg, present_pages, NULL);

inactive = present_pages[0];
active = present_pages[1];
@@ -2337,7 +2350,8 @@ static int mem_control_stat_show(struct


#ifdef CONFIG_DEBUG_VM
- cb->fill(cb, "inactive_ratio", calc_inactive_ratio(mem_cont, NULL));
+ cb->fill(cb, "inactive_ratio",
+ calc_inactive_ratio(mem_cont, NULL, NULL));

{
int nid, zid;
Index: mmotm-2.6.29-Mar23/include/linux/memcontrol.h
===================================================================
--- mmotm-2.6.29-Mar23.orig/include/linux/memcontrol.h
+++ mmotm-2.6.29-Mar23/include/linux/memcontrol.h
@@ -93,7 +93,7 @@ extern void mem_cgroup_note_reclaim_prio
int priority);
extern void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem,
int priority);
-int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg);
+int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg, struct zone *z);
unsigned long mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg,
struct zone *zone,
enum lru_list lru);
@@ -234,7 +234,7 @@ static inline bool mem_cgroup_oom_called
}

static inline int
-mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg)
+mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg, struct zone *z)
{
return 1;
}
Index: mmotm-2.6.29-Mar23/mm/vmscan.c
===================================================================
--- mmotm-2.6.29-Mar23.orig/mm/vmscan.c
+++ mmotm-2.6.29-Mar23/mm/vmscan.c
@@ -1341,7 +1341,7 @@ static int inactive_anon_is_low(struct z
if (scanning_global_lru(sc))
low = inactive_anon_is_low_global(zone);
else
- low = mem_cgroup_inactive_anon_is_low(sc->mem_cgroup);
+ low = mem_cgroup_inactive_anon_is_low(sc->mem_cgroup, NULL);
return low;
}


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/