[PATCH 4/4] memcg: add anon_scan_ratio to memory.stat file
From: KOSAKI Motohiro <hidden>
Date: 2009-12-28 07:49:31
Also in:
lkml
Subsystem:
control group - memory resource controller (memcg), memory management, the rest · Maintainers:
Johannes Weiner, Michal Hocko, Roman Gushchin, Shakeel Butt, Andrew Morton, Linus Torvalds
anon_scan_ratio feature doesn't only useful for global VM pressure analysis, but it also useful for memcg memroy pressure analysis. Then, this patch add anon_scan_ratio field to memory.stat file too. Instead, following debug statistics was removed. It isn't so user and/or developer friendly. - recent_rotated_anon - recent_rotated_file - recent_scanned_anon - recent_scanned_file This removing don't cause ABI issue. because it was enclosed CONFIG_DEBUG_VM. Cc: Balbir Singh <redacted> Cc: KAMEZAWA Hiroyuki <redacted> Signed-off-by: KOSAKI Motohiro <redacted> --- mm/memcontrol.c | 43 +++++++++++++++++++------------------------ 1 files changed, 19 insertions(+), 24 deletions(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 325df12..daa027c 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c@@ -2950,6 +2950,9 @@ static int mem_control_stat_show(struct cgroup *cont, struct cftype *cft, { struct mem_cgroup *mem_cont = mem_cgroup_from_cont(cont); struct mcs_total_stat mystat; + struct zone *zone; + unsigned long total_anon = 0; + unsigned long total_scan_anon = 0; int i; memset(&mystat, 0, sizeof(mystat));
@@ -2978,34 +2981,26 @@ static int mem_control_stat_show(struct cgroup *cont, struct cftype *cft, cb->fill(cb, memcg_stat_strings[i].total_name, mystat.stat[i]); } -#ifdef CONFIG_DEBUG_VM cb->fill(cb, "inactive_ratio", calc_inactive_ratio(mem_cont, NULL)); - { - int nid, zid; + for_each_populated_zone(zone) { + int nid = zone->zone_pgdat->node_id; + int zid = zone_idx(zone); struct mem_cgroup_per_zone *mz; - unsigned long recent_rotated[2] = {0, 0}; - unsigned long recent_scanned[2] = {0, 0}; - - for_each_online_node(nid) - for (zid = 0; zid < MAX_NR_ZONES; zid++) { - mz = mem_cgroup_zoneinfo(mem_cont, nid, zid); - - recent_rotated[0] += - mz->reclaim_stat.recent_rotated[0]; - recent_rotated[1] += - mz->reclaim_stat.recent_rotated[1]; - recent_scanned[0] += - mz->reclaim_stat.recent_scanned[0]; - recent_scanned[1] += - mz->reclaim_stat.recent_scanned[1]; - } - cb->fill(cb, "recent_rotated_anon", recent_rotated[0]); - cb->fill(cb, "recent_rotated_file", recent_rotated[1]); - cb->fill(cb, "recent_scanned_anon", recent_scanned[0]); - cb->fill(cb, "recent_scanned_file", recent_scanned[1]); + unsigned long anon; + unsigned long ratio; + + mz = mem_cgroup_zoneinfo(mem_cont, nid, zid); + + anon = MEM_CGROUP_ZSTAT(mz, LRU_INACTIVE_ANON); + anon += MEM_CGROUP_ZSTAT(mz, LRU_ACTIVE_ANON); + + ratio = get_anon_scan_ratio(zone, mem_cont, mem_cont->swappiness); + + total_anon += anon; + total_scan_anon += anon * ratio; } -#endif + cb->fill(cb, "anon_scan_ratio", total_scan_anon / total_anon); return 0; }
--
1.6.5.2
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>