Commit 68b4876d996e8749142b2895bc2e251448996363
Committed by
Linus Torvalds
1 parent
1a36e59d48
Exists in
master
and in
20 other branches
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 |
mm/memcontrol.c
... | ... | @@ -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 | } |
mm/rmap.c
... | ... | @@ -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))) |