提交 91537fee 编写于 作者: M Minchan Kim 提交者: Linus Torvalds

mm: add NR_ZSMALLOC to vmstat

zram is very popular for some of the embedded world (e.g., TV, mobile
phones).  On those system, zsmalloc's consumed memory size is never
trivial (one of example from real product system, total memory: 800M,
zsmalloc consumed: 150M), so we have used this out of tree patch to
monitor system memory behavior via /proc/vmstat.

With zsmalloc in vmstat, it helps in tracking down system behavior due
to memory usage.

[minchan@kernel.org: zsmalloc: follow up zsmalloc vmstat]
  Link: http://lkml.kernel.org/r/20160607091737.GC23435@bbox
[akpm@linux-foundation.org: fix build with CONFIG_ZSMALLOC=m]
Link: http://lkml.kernel.org/r/1464919731-13255-1-git-send-email-minchan@kernel.orgSigned-off-by: NMinchan Kim <minchan@kernel.org>
Cc: Sangseok Lee <sangseok.lee@lge.com>
Cc: Chanho Min <chanho.min@lge.com>
Cc: Chan Gyun Jeong <chan.jeong@lge.com>
Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 8ea1d2a1
...@@ -140,6 +140,9 @@ enum zone_stat_item { ...@@ -140,6 +140,9 @@ enum zone_stat_item {
NR_DIRTIED, /* page dirtyings since bootup */ NR_DIRTIED, /* page dirtyings since bootup */
NR_WRITTEN, /* page writings since bootup */ NR_WRITTEN, /* page writings since bootup */
NR_PAGES_SCANNED, /* pages scanned since last reclaim */ NR_PAGES_SCANNED, /* pages scanned since last reclaim */
#if IS_ENABLED(CONFIG_ZSMALLOC)
NR_ZSPAGES, /* allocated in zsmalloc */
#endif
#ifdef CONFIG_NUMA #ifdef CONFIG_NUMA
NUMA_HIT, /* allocated in intended node */ NUMA_HIT, /* allocated in intended node */
NUMA_MISS, /* allocated in non intended node */ NUMA_MISS, /* allocated in non intended node */
......
...@@ -718,7 +718,9 @@ const char * const vmstat_text[] = { ...@@ -718,7 +718,9 @@ const char * const vmstat_text[] = {
"nr_dirtied", "nr_dirtied",
"nr_written", "nr_written",
"nr_pages_scanned", "nr_pages_scanned",
#if IS_ENABLED(CONFIG_ZSMALLOC)
"nr_zspages",
#endif
#ifdef CONFIG_NUMA #ifdef CONFIG_NUMA
"numa_hit", "numa_hit",
"numa_miss", "numa_miss",
......
...@@ -1007,6 +1007,7 @@ static void __free_zspage(struct zs_pool *pool, struct size_class *class, ...@@ -1007,6 +1007,7 @@ static void __free_zspage(struct zs_pool *pool, struct size_class *class,
next = get_next_page(page); next = get_next_page(page);
reset_page(page); reset_page(page);
unlock_page(page); unlock_page(page);
dec_zone_page_state(page, NR_ZSPAGES);
put_page(page); put_page(page);
page = next; page = next;
} while (page != NULL); } while (page != NULL);
...@@ -1137,11 +1138,15 @@ static struct zspage *alloc_zspage(struct zs_pool *pool, ...@@ -1137,11 +1138,15 @@ static struct zspage *alloc_zspage(struct zs_pool *pool,
page = alloc_page(gfp); page = alloc_page(gfp);
if (!page) { if (!page) {
while (--i >= 0) while (--i >= 0) {
dec_zone_page_state(pages[i], NR_ZSPAGES);
__free_page(pages[i]); __free_page(pages[i]);
}
cache_free_zspage(pool, zspage); cache_free_zspage(pool, zspage);
return NULL; return NULL;
} }
inc_zone_page_state(page, NR_ZSPAGES);
pages[i] = page; pages[i] = page;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册