Commit 68b4876d996e8749142b2895bc2e251448996363

Authored by Sha Zhengju
Committed by Linus Torvalds
1 parent 1a36e59d48

memcg: remove MEMCG_NR_FILE_MAPPED

While accounting memcg page stat, it's not worth to use
MEMCG_NR_FILE_MAPPED as an extra layer of indirection because of the
complexity and presumed performance overhead.  We can use
MEM_CGROUP_STAT_FILE_MAPPED directly.

Signed-off-by: Sha Zhengju <handai.szj@taobao.com>
Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Acked-by: Michal Hocko <mhocko@suse.cz>
Acked-by: Fengguang Wu <fengguang.wu@intel.com>
Reviewed-by: Greg Thelen <gthelen@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 3 changed files with 22 additions and 34 deletions Side-by-side Diff

include/linux/memcontrol.h
... ... @@ -30,9 +30,20 @@
30 30 struct mm_struct;
31 31 struct kmem_cache;
32 32  
33   -/* Stats that can be updated by kernel. */
34   -enum mem_cgroup_page_stat_item {
35   - MEMCG_NR_FILE_MAPPED, /* # of pages charged as file rss */
  33 +/*
  34 + * The corresponding mem_cgroup_stat_names is defined in mm/memcontrol.c,
  35 + * These two lists should keep in accord with each other.
  36 + */
  37 +enum mem_cgroup_stat_index {
  38 + /*
  39 + * For MEM_CONTAINER_TYPE_ALL, usage = pagecache + rss.
  40 + */
  41 + MEM_CGROUP_STAT_CACHE, /* # of pages charged as cache */
  42 + MEM_CGROUP_STAT_RSS, /* # of pages charged as anon rss */
  43 + MEM_CGROUP_STAT_RSS_HUGE, /* # of pages charged as anon huge */
  44 + MEM_CGROUP_STAT_FILE_MAPPED, /* # of pages charged as file rss */
  45 + MEM_CGROUP_STAT_SWAP, /* # of pages, swapped out */
  46 + MEM_CGROUP_STAT_NSTATS,
36 47 };
37 48  
38 49 struct mem_cgroup_reclaim_cookie {
39 50  
40 51  
... ... @@ -233,17 +244,17 @@
233 244 }
234 245  
235 246 void mem_cgroup_update_page_stat(struct page *page,
236   - enum mem_cgroup_page_stat_item idx,
  247 + enum mem_cgroup_stat_index idx,
237 248 int val);
238 249  
239 250 static inline void mem_cgroup_inc_page_stat(struct page *page,
240   - enum mem_cgroup_page_stat_item idx)
  251 + enum mem_cgroup_stat_index idx)
241 252 {
242 253 mem_cgroup_update_page_stat(page, idx, 1);
243 254 }
244 255  
245 256 static inline void mem_cgroup_dec_page_stat(struct page *page,
246   - enum mem_cgroup_page_stat_item idx)
  257 + enum mem_cgroup_stat_index idx)
247 258 {
248 259 mem_cgroup_update_page_stat(page, idx, -1);
249 260 }
250 261  
... ... @@ -449,12 +460,12 @@
449 460 }
450 461  
451 462 static inline void mem_cgroup_inc_page_stat(struct page *page,
452   - enum mem_cgroup_page_stat_item idx)
  463 + enum mem_cgroup_stat_index idx)
453 464 {
454 465 }
455 466  
456 467 static inline void mem_cgroup_dec_page_stat(struct page *page,
457   - enum mem_cgroup_page_stat_item idx)
  468 + enum mem_cgroup_stat_index idx)
458 469 {
459 470 }
460 471  
... ... @@ -84,21 +84,6 @@
84 84 #endif
85 85  
86 86  
87   -/*
88   - * Statistics for memory cgroup.
89   - */
90   -enum mem_cgroup_stat_index {
91   - /*
92   - * For MEM_CONTAINER_TYPE_ALL, usage = pagecache + rss.
93   - */
94   - MEM_CGROUP_STAT_CACHE, /* # of pages charged as cache */
95   - MEM_CGROUP_STAT_RSS, /* # of pages charged as anon rss */
96   - MEM_CGROUP_STAT_RSS_HUGE, /* # of pages charged as anon huge */
97   - MEM_CGROUP_STAT_FILE_MAPPED, /* # of pages charged as file rss */
98   - MEM_CGROUP_STAT_SWAP, /* # of pages, swapped out */
99   - MEM_CGROUP_STAT_NSTATS,
100   -};
101   -
102 87 static const char * const mem_cgroup_stat_names[] = {
103 88 "cache",
104 89 "rss",
... ... @@ -2231,7 +2216,7 @@
2231 2216 }
2232 2217  
2233 2218 void mem_cgroup_update_page_stat(struct page *page,
2234   - enum mem_cgroup_page_stat_item idx, int val)
  2219 + enum mem_cgroup_stat_index idx, int val)
2235 2220 {
2236 2221 struct mem_cgroup *memcg;
2237 2222 struct page_cgroup *pc = lookup_page_cgroup(page);
... ... @@ -2243,14 +2228,6 @@
2243 2228 memcg = pc->mem_cgroup;
2244 2229 if (unlikely(!memcg || !PageCgroupUsed(pc)))
2245 2230 return;
2246   -
2247   - switch (idx) {
2248   - case MEMCG_NR_FILE_MAPPED:
2249   - idx = MEM_CGROUP_STAT_FILE_MAPPED;
2250   - break;
2251   - default:
2252   - BUG();
2253   - }
2254 2231  
2255 2232 this_cpu_add(memcg->stat->count[idx], val);
2256 2233 }
... ... @@ -1111,7 +1111,7 @@
1111 1111 mem_cgroup_begin_update_page_stat(page, &locked, &flags);
1112 1112 if (atomic_inc_and_test(&page->_mapcount)) {
1113 1113 __inc_zone_page_state(page, NR_FILE_MAPPED);
1114   - mem_cgroup_inc_page_stat(page, MEMCG_NR_FILE_MAPPED);
  1114 + mem_cgroup_inc_page_stat(page, MEM_CGROUP_STAT_FILE_MAPPED);
1115 1115 }
1116 1116 mem_cgroup_end_update_page_stat(page, &locked, &flags);
1117 1117 }
... ... @@ -1155,7 +1155,7 @@
1155 1155 NR_ANON_TRANSPARENT_HUGEPAGES);
1156 1156 } else {
1157 1157 __dec_zone_page_state(page, NR_FILE_MAPPED);
1158   - mem_cgroup_dec_page_stat(page, MEMCG_NR_FILE_MAPPED);
  1158 + mem_cgroup_dec_page_stat(page, MEM_CGROUP_STAT_FILE_MAPPED);
1159 1159 mem_cgroup_end_update_page_stat(page, &locked, &flags);
1160 1160 }
1161 1161 if (unlikely(PageMlocked(page)))