Linux-mm Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH] mm: add NR_ZSMALLOC to vmstat
@ 2016-06-03  2:08 Minchan Kim
  2016-06-03  8:01 ` Sergey Senozhatsky
  0 siblings, 1 reply; 6+ messages in thread
From: Minchan Kim @ 2016-06-03  2:08 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-kernel, linux-mm, Minchan Kim, Sangseok Lee, Chanho Min,
	Chan Gyun Jeong

Now, zram is very popular for some of embedded world(e.g., TV, mobile
phone). On those system, zsmalloc 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 tracking down system behavior by
memory usage.

Cc: Sangseok Lee <sangseok.lee@lge.com>
Cc: Chanho Min <chanho.min@lge.com>
Cc: Chan Gyun Jeong <chan.jeong@lge.com>
Signed-off-by: Minchan Kim <minchan@kernel.org>
---
 include/linux/mmzone.h | 3 +++
 mm/vmstat.c            | 4 +++-
 mm/zsmalloc.c          | 7 ++++++-
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index 3388ccbab7d6..971d4c9f2550 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -140,6 +140,9 @@ enum zone_stat_item {
 	NR_DIRTIED,		/* page dirtyings since bootup */
 	NR_WRITTEN,		/* page writings since bootup */
 	NR_PAGES_SCANNED,	/* pages scanned since last reclaim */
+#ifdef CONFIG_ZSMALLOC
+	NR_ZSMALLOC,
+#endif
 #ifdef CONFIG_NUMA
 	NUMA_HIT,		/* allocated in intended node */
 	NUMA_MISS,		/* allocated in non intended node */
diff --git a/mm/vmstat.c b/mm/vmstat.c
index 1b585f8e3088..3701905f3eb4 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -730,7 +730,9 @@ const char * const vmstat_text[] = {
 	"nr_dirtied",
 	"nr_written",
 	"nr_pages_scanned",
-
+#ifdef CONFIG_ZSMALLOC
+	"nr_zsmalloc",
+#endif
 #ifdef CONFIG_NUMA
 	"numa_hit",
 	"numa_miss",
diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
index a80100db16d6..8e71ec4f8005 100644
--- a/mm/zsmalloc.c
+++ b/mm/zsmalloc.c
@@ -1022,6 +1022,7 @@ static void __free_zspage(struct zs_pool *pool, struct size_class *class,
 		reset_page(page);
 		unlock_page(page);
 		put_page(page);
+		dec_zone_page_state(page, NR_ZSMALLOC);
 		page = next;
 	} while (page != NULL);
 
@@ -1149,11 +1150,15 @@ static struct zspage *alloc_zspage(struct zs_pool *pool,
 
 		page = alloc_page(gfp);
 		if (!page) {
-			while (--i >= 0)
+			while (--i >= 0) {
 				__free_page(pages[i]);
+				dec_zone_page_state(page, NR_ZSMALLOC);
+			}
 			cache_free_zspage(pool, zspage);
 			return NULL;
 		}
+
+		inc_zone_page_state(page, NR_ZSMALLOC);
 		pages[i] = page;
 	}
 
-- 
1.9.1

--
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/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, back to index

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-03  2:08 [PATCH] mm: add NR_ZSMALLOC to vmstat Minchan Kim
2016-06-03  8:01 ` Sergey Senozhatsky
2016-06-03  8:23   ` Minchan Kim
2016-06-03 10:24     ` Sergey Senozhatsky
2016-06-07  1:43       ` Minchan Kim
2016-06-09  1:40         ` Sergey Senozhatsky

Linux-mm Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-mm/0 linux-mm/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-mm linux-mm/ https://lore.kernel.org/linux-mm \
		linux-mm@kvack.org
	public-inbox-index linux-mm

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kvack.linux-mm


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git