Re: [PATCH 5/7] Fix not good check of mem_cgroup_local_usage()
From: KAMEZAWA Hiroyuki <hidden>
Date: 2011-06-19 23:51:58
Also in:
lkml
On Fri, 17 Jun 2011 15:27:36 -0700 Ying Han [off-list ref] wrote:
On Wed, Jun 15, 2011 at 8:54 PM, KAMEZAWA Hiroyuki [off-list ref] wrote:quoted
From fcfc6ee9847b0b2571cd6e9847572d7c70e1e2b2 Mon Sep 17 00:00:00 2001 From: KAMEZAWA Hiroyuki <redacted> Date: Thu, 16 Jun 2011 09:23:54 +0900 Subject: [PATCH 5/7] Fix not good check of mem_cgroup_local_usage() Now, mem_cgroup_local_usage(memcg) is used as hint for scanning memory cgroup hierarchy. If it returns true, the memcg has some reclaimable memory. But this function doesn't take care of A - unevictable pages A - anon pages on swapless system. This patch fixes the function to use LRU information. For NUMA, for avoid scanning, numa scan bitmap is used. If it's empty, some more precise check will be done. Signed-off-by: KAMEZAWA Hiroyuki <redacted> --- A mm/memcontrol.c | A 43 +++++++++++++++++++++++++++++++++---------- A 1 files changed, 33 insertions(+), 10 deletions(-) Index: mmotm-0615/mm/memcontrol.c ===================================================================--- mmotm-0615.orig/mm/memcontrol.c +++ mmotm-0615/mm/memcontrol.c@@ -632,15 +632,6 @@ static long mem_cgroup_read_stat(structA A A A return val; A } -static long mem_cgroup_local_usage(struct mem_cgroup *mem) -{ - A A A long ret; - - A A A ret = mem_cgroup_read_stat(mem, MEM_CGROUP_STAT_RSS); - A A A ret += mem_cgroup_read_stat(mem, MEM_CGROUP_STAT_CACHE); - A A A return ret; -} - A static void mem_cgroup_swap_statistics(struct mem_cgroup *mem, A A A A A A A A A A A A A A A A A A A A bool charge) A {@@ -1713,6 +1704,23 @@ static void mem_cgroup_numascan_init(strA A A A mutex_init(&mem->numascan_mutex); A } +static bool mem_cgroup_reclaimable(struct mem_cgroup *mem, bool noswap) +{ + A A A if (!nodes_empty(mem->scan_nodes)) + A A A A A A A return true; + A A A /* slow path */ + A A A if (mem_cgroup_get_local_zonestat(mem, LRU_INACTIVE_FILE)) + A A A A A A A return true; + A A A if (mem_cgroup_get_local_zonestat(mem, LRU_ACTIVE_FILE)) + A A A A A A A return true;Wondering if we can simplify this like: if (mem_cgroup_nr_file_lru_pages(mem)) return true;quoted
+ A A A if (noswap || !total_swap_pages) + A A A A A A A return false; + A A A if (mem_cgroup_get_local_zonestat(mem, LRU_INACTIVE_ANON)) + A A A A A A A return true; + A A A if (mem_cgroup_get_local_zonestat(mem, LRU_ACTIVE_ANON)) + A A A A A A A return true;the same: if (mem_cgroup_nr_anon_lru_pages(mem)) return true;quoted
+ A A A return false; +}The two functions above are part of memory.numa_stat patch which is in mmotm i believe. Just feel the functionality a bit duplicate except the noswap parameter and scan_nodes.
Ah, I didn't noticed such function. Hm, considering more, I think we don't have to scann all nodes and make sum of number because what we check is whether pages == 0 or pages != 0. I'll make an update. Thanks, -Kame -- 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/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>