From: Johannes Weiner Date: Wed, 23 Mar 2011 23:42:26 +0000 (-0700) Subject: memcg: no uncharged pages reach page_cgroup_zoneinfo X-Git-Tag: firefly_0821_release~7613^2~1889 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=ad324e94475a04cfcdfdb11ad20f8ea81268e411;p=firefly-linux-kernel-4.4.55.git memcg: no uncharged pages reach page_cgroup_zoneinfo This patch series removes the direct page pointer from struct page_cgroup, which saves 20% of per-page memcg memory overhead (Fedora and Ubuntu enable memcg per default, openSUSE apparently too). The node id or section number is encoded in the remaining free bits of pc->flags which allows calculating the corresponding page without the extra pointer. I ran, what I think is, a worst-case microbenchmark that just cats a large sparse file to /dev/null, because it means that walking the LRU list on behalf of per-cgroup reclaim and looking up pages from page_cgroups is happening constantly and at a high rate. But it made no measurable difference. A profile reported a 0.11% share of the new lookup_cgroup_page() function in this benchmark. This patch: All callsites check PCG_USED before passing pc->mem_cgroup, so the latter is never NULL. Signed-off-by: Johannes Weiner Acked-by: KAMEZAWA Hiroyuki Cc: Daisuke Nishimura Acked-by: Balbir Singh Cc: Minchan Kim Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 0356cb6c9504..5f7b0e1d789c 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -370,9 +370,6 @@ page_cgroup_zoneinfo(struct page_cgroup *pc) int nid = page_cgroup_nid(pc); int zid = page_cgroup_zid(pc); - if (!mem) - return NULL; - return mem_cgroup_zoneinfo(mem, nid, zid); }