LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH 0/6] new zram statistics reporting scheme
@ 2015-03-10 15:08 Sergey Senozhatsky
  2015-03-10 15:08 ` [PATCH 1/6] zram: remove `num_migrated' device attr Sergey Senozhatsky
                   ` (6 more replies)
  0 siblings, 7 replies; 21+ messages in thread
From: Sergey Senozhatsky @ 2015-03-10 15:08 UTC (permalink / raw)
  To: Andrew Morton, Minchan Kim
  Cc: Nitin Gupta, linux-kernel, Sergey Senozhatsky, Sergey Senozhatsky

Hello,

This patch introduces rework to zram stats. We have per-stat sysfs
nodes, and it makes things a bit hard to use in user space: it doesn't
give an immediate stats 'snapshot', it requires user space to use
more syscals -- open, read, close for every stat file, with 
appropriate error checks on every step, etc.

First, zram now accounts block layer statistics. available in
/sys/block/zram<id>/stat and /proc/diskstats files. So some new
stats are available (see Documentation/block/stat.txt), besides,
zram's activities are now can be monitored by sysstat's iostat
or similar tools.

Example:
cat /sys/block/zram0/stat
248     0    1984    0   251029     0  2008232   5120   0   5116   5116



Second, group currently exported on per-stat basis nodes into two
categories (files):

-- zram<id>/io_stat
accumulates device's IO stats, that are not accounted by block layer,
and contains:
        failed_reads
        failed_writes
        invalid_io
        notify_free

Example:
cat /sys/block/zram0/io_stat
0        0        0   652572


-- zram<id>/mm_stat
accumulates zram mm stats and contains:
        orig_data_size
        compr_data_size
        mem_used_total
        mem_limit
        mem_used_max
        zero_pages
        num_migrated

Example:
cat /sys/block/zram0/mm_stat
434634752 270288572 279158784        0 579895296    15060        0


per-stat sysfs nodes are now considered to be deprecated and we plan
to remove them (and clean up some of the existing stat code) in two
years (as of now, there is no warning printed to syslog about deprecated
stats being used). user space is advised to use the above mentioned 3
files.


note:
util-linux mailing list is not Cc-ed into this series. once we settle
it down, I'll write to Karel. (we have several months ahead until 4.1
will be released).


Sergey Senozhatsky (6):
  zram: remove `num_migrated' device attr
  zram: move compact_store() to sysfs functions area
  zram: use generic start/end io accounting
  zram: describe device attrs in documentation
  zram: export new 'io_stat' sysfs attrs
  zram: export new 'mm_stat' sysfs attrs

 Documentation/ABI/testing/sysfs-block-zram |  18 +++--
 Documentation/blockdev/zram.txt            |  79 ++++++++++++++++++----
 drivers/block/zram/zram_drv.c              | 101 ++++++++++++++++++++++-------
 3 files changed, 157 insertions(+), 41 deletions(-)

-- 
2.3.2.209.gd67f9d5


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

* [PATCH 1/6] zram: remove `num_migrated' device attr
  2015-03-10 15:08 [PATCH 0/6] new zram statistics reporting scheme Sergey Senozhatsky
@ 2015-03-10 15:08 ` Sergey Senozhatsky
  2015-03-12  1:16   ` Minchan Kim
  2015-03-10 15:08 ` [PATCH 2/6] zram: move compact_store() to sysfs functions area Sergey Senozhatsky
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 21+ messages in thread
From: Sergey Senozhatsky @ 2015-03-10 15:08 UTC (permalink / raw)
  To: Andrew Morton, Minchan Kim
  Cc: Nitin Gupta, linux-kernel, Sergey Senozhatsky, Sergey Senozhatsky

Remove sysfs `num_migrated' attribute. We are moving away from
per-stat device attrs towards 3 stat files that will accumulate
io and mm stats in a format similar to block layer statistics in
/sys/block/<dev>/stat. That will be easier to use in user space,
and reduce the number of syscalls needed to read zram device
statistics.

`num_migrated' will return back in zram<id>/mm_stat file.

Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
---
 Documentation/ABI/testing/sysfs-block-zram | 7 -------
 drivers/block/zram/zram_drv.c              | 2 --
 2 files changed, 9 deletions(-)

diff --git a/Documentation/ABI/testing/sysfs-block-zram b/Documentation/ABI/testing/sysfs-block-zram
index bede902..91ad707 100644
--- a/Documentation/ABI/testing/sysfs-block-zram
+++ b/Documentation/ABI/testing/sysfs-block-zram
@@ -149,10 +149,3 @@ Description:
 		The compact file is write-only and trigger compaction for
 		allocator zrm uses. The allocator moves some objects so that
 		it could free fragment space.
-
-What:		/sys/block/zram<id>/num_migrated
-Date:		August 2015
-Contact:	Minchan Kim <minchan@kernel.org>
-Description:
-		The compact file is read-only and shows how many object
-		migrated by compaction.
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 87f6671..2009a5a 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -392,7 +392,6 @@ ZRAM_ATTR_RO(invalid_io);
 ZRAM_ATTR_RO(notify_free);
 ZRAM_ATTR_RO(zero_pages);
 ZRAM_ATTR_RO(compr_data_size);
-ZRAM_ATTR_RO(num_migrated);
 
 static inline bool zram_meta_get(struct zram *zram)
 {
@@ -1069,7 +1068,6 @@ static struct attribute *zram_disk_attrs[] = {
 	&dev_attr_num_writes.attr,
 	&dev_attr_failed_reads.attr,
 	&dev_attr_failed_writes.attr,
-	&dev_attr_num_migrated.attr,
 	&dev_attr_compact.attr,
 	&dev_attr_invalid_io.attr,
 	&dev_attr_notify_free.attr,
-- 
2.3.2.209.gd67f9d5


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

* [PATCH 2/6] zram: move compact_store() to sysfs functions area
  2015-03-10 15:08 [PATCH 0/6] new zram statistics reporting scheme Sergey Senozhatsky
  2015-03-10 15:08 ` [PATCH 1/6] zram: remove `num_migrated' device attr Sergey Senozhatsky
@ 2015-03-10 15:08 ` Sergey Senozhatsky
  2015-03-12  1:24   ` Minchan Kim
  2015-03-10 15:08 ` [PATCH 3/6] zram: use generic start/end io accounting Sergey Senozhatsky
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 21+ messages in thread
From: Sergey Senozhatsky @ 2015-03-10 15:08 UTC (permalink / raw)
  To: Andrew Morton, Minchan Kim
  Cc: Nitin Gupta, linux-kernel, Sergey Senozhatsky, Sergey Senozhatsky

A cosmetic change. We have a new code layout and keep zram per-device
sysfs store and show functions in one place. Move compact_store() to
that handlers block to conform to current layout.

Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
---
 drivers/block/zram/zram_drv.c | 42 +++++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 21 deletions(-)

diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 2009a5a..472c40c 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -67,27 +67,6 @@ static inline struct zram *dev_to_zram(struct device *dev)
 	return (struct zram *)dev_to_disk(dev)->private_data;
 }
 
-static ssize_t compact_store(struct device *dev,
-		struct device_attribute *attr, const char *buf, size_t len)
-{
-	unsigned long nr_migrated;
-	struct zram *zram = dev_to_zram(dev);
-	struct zram_meta *meta;
-
-	down_read(&zram->init_lock);
-	if (!init_done(zram)) {
-		up_read(&zram->init_lock);
-		return -EINVAL;
-	}
-
-	meta = zram->meta;
-	nr_migrated = zs_compact(meta->mem_pool);
-	atomic64_add(nr_migrated, &zram->stats.num_migrated);
-	up_read(&zram->init_lock);
-
-	return len;
-}
-
 /* flag operations require table entry bit_spin_lock() being held */
 static int zram_test_flag(struct zram_meta *meta, u32 index,
 			enum zram_pageflags flag)
@@ -384,6 +363,27 @@ static ssize_t comp_algorithm_store(struct device *dev,
 	return len;
 }
 
+static ssize_t compact_store(struct device *dev,
+		struct device_attribute *attr, const char *buf, size_t len)
+{
+	unsigned long nr_migrated;
+	struct zram *zram = dev_to_zram(dev);
+	struct zram_meta *meta;
+
+	down_read(&zram->init_lock);
+	if (!init_done(zram)) {
+		up_read(&zram->init_lock);
+		return -EINVAL;
+	}
+
+	meta = zram->meta;
+	nr_migrated = zs_compact(meta->mem_pool);
+	atomic64_add(nr_migrated, &zram->stats.num_migrated);
+	up_read(&zram->init_lock);
+
+	return len;
+}
+
 ZRAM_ATTR_RO(num_reads);
 ZRAM_ATTR_RO(num_writes);
 ZRAM_ATTR_RO(failed_reads);
-- 
2.3.2.209.gd67f9d5


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

* [PATCH 3/6] zram: use generic start/end io accounting
  2015-03-10 15:08 [PATCH 0/6] new zram statistics reporting scheme Sergey Senozhatsky
  2015-03-10 15:08 ` [PATCH 1/6] zram: remove `num_migrated' device attr Sergey Senozhatsky
  2015-03-10 15:08 ` [PATCH 2/6] zram: move compact_store() to sysfs functions area Sergey Senozhatsky
@ 2015-03-10 15:08 ` Sergey Senozhatsky
  2015-03-12  1:25   ` Minchan Kim
  2015-03-10 15:08 ` [PATCH 4/6] zram: describe device attrs in documentation Sergey Senozhatsky
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 21+ messages in thread
From: Sergey Senozhatsky @ 2015-03-10 15:08 UTC (permalink / raw)
  To: Andrew Morton, Minchan Kim
  Cc: Nitin Gupta, linux-kernel, Sergey Senozhatsky, Sergey Senozhatsky

Use bio generic_start_io_acct() and generic_end_io_acct() to account
device's block layer statistics. This will let users to monitor zram
activities using sysstat and similar packages/tools.

Apart from the usual per-stat sysfs attr, zram IO stats are now also
available in '/sys/block/zram<id>/stat' and '/proc/diskstats' files.

We will slowly get rid of per-stat sysfs files.

Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
---
 drivers/block/zram/zram_drv.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 472c40c..45319eb9 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -743,8 +743,12 @@ static void zram_bio_discard(struct zram *zram, u32 index,
 static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index,
 			int offset, int rw)
 {
+	unsigned long start_time = jiffies;
 	int ret;
 
+	generic_start_io_acct(rw, bvec->bv_len >> SECTOR_SHIFT,
+			&zram->disk->part0);
+
 	if (rw == READ) {
 		atomic64_inc(&zram->stats.num_reads);
 		ret = zram_bvec_read(zram, bvec, index, offset);
@@ -753,6 +757,8 @@ static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index,
 		ret = zram_bvec_write(zram, bvec, index, offset);
 	}
 
+	generic_end_io_acct(rw, &zram->disk->part0, start_time);
+
 	if (unlikely(ret)) {
 		if (rw == READ)
 			atomic64_inc(&zram->stats.failed_reads);
-- 
2.3.2.209.gd67f9d5


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

* [PATCH 4/6] zram: describe device attrs in documentation
  2015-03-10 15:08 [PATCH 0/6] new zram statistics reporting scheme Sergey Senozhatsky
                   ` (2 preceding siblings ...)
  2015-03-10 15:08 ` [PATCH 3/6] zram: use generic start/end io accounting Sergey Senozhatsky
@ 2015-03-10 15:08 ` Sergey Senozhatsky
  2015-03-12  1:33   ` Minchan Kim
  2015-03-10 15:08 ` [PATCH 5/6] zram: export new 'io_stat' sysfs attrs Sergey Senozhatsky
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 21+ messages in thread
From: Sergey Senozhatsky @ 2015-03-10 15:08 UTC (permalink / raw)
  To: Andrew Morton, Minchan Kim
  Cc: Nitin Gupta, linux-kernel, Sergey Senozhatsky, Sergey Senozhatsky

Briefly describe exported device stat attrs in zram documentation.
We will eventually get rid of per-stat sysfs nodes and, thus,
clean up Documentation/ABI/testing/sysfs-block-zram file, which is
the only source of information about device sysfs nodes.

Add `num_migrated' description, since there is no independent
`num_migrated' sysfs node (and no corresponding sysfs-block-zram
entry), it will be exported via zram<id>/mm_stat file.

At this point we can provide minimal attrs description, because
sysfs-block-zram still contains detailed information.

Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
---
 Documentation/blockdev/zram.txt | 49 +++++++++++++++++++++++++++++------------
 1 file changed, 35 insertions(+), 14 deletions(-)

diff --git a/Documentation/blockdev/zram.txt b/Documentation/blockdev/zram.txt
index 902c97c..149b49a 100644
--- a/Documentation/blockdev/zram.txt
+++ b/Documentation/blockdev/zram.txt
@@ -117,20 +117,41 @@ execute
 	echo X > /sys/class/zram-control/zram_remove
 
 8) Stats:
-	Per-device statistics are exported as various nodes under
-	/sys/block/zram<id>/
-		disksize
-		num_reads
-		num_writes
-		failed_reads
-		failed_writes
-		invalid_io
-		notify_free
-		zero_pages
-		orig_data_size
-		compr_data_size
-		mem_used_total
-		mem_used_max
+Per-device statistics are exported as various nodes under /sys/block/zram<id>/
+
+A brief description of exported device attritbutes. For more details please
+read Documentation/ABI/testing/sysfs-block-zram.
+
+Name             mode             description
+----            ------            -----------
+disksize          RO    disk size
+initstate         RO    shows the initialization state of the device
+reset             WO    trigger device reset
+num_reads         RO    the number of reads
+failed_reads      RO    the number of failed reads
+num_write         RO    the number of writes
+failed_writes     RO    the number of failed writes
+invalid_io        RO    the number of non-page-size-aligned I/O requests
+max_comp_streams  RW    the number of possible concurrent compress operations
+comp_algorithm    RW    show and change the compression algorithm
+notify_free       RO    the number of notifications to free pages (either
+                        slot free notifications or REQ_DISCARD requests)
+zero_pages        RO    the number of zero filled pages written to this disk
+orig_data_size    RO    uncompressed size of data stored in this disk
+compr_data_size   RO    compressed size of data stored in this disk
+mem_used_total    RO    the amount of memory allocated for this disk
+mem_used_max      RW    the maximum amount of memory zram have consumed to
+                        store compressed data
+mem_limit         RW    the maximum amount of memory ZRAM can use to store
+                        the compressed data
+num_migrated      RO    the number of objects migrated by compaction
+compact           WO    trigger memory compaction
+
+
+File /sys/block/zram<id>/stat
+
+Represents block layer statistics. Read Documentation/block/stat.txt for
+details.
 
 9) Deactivate:
 	swapoff /dev/zram0
-- 
2.3.2.209.gd67f9d5


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

* [PATCH 5/6] zram: export new 'io_stat' sysfs attrs
  2015-03-10 15:08 [PATCH 0/6] new zram statistics reporting scheme Sergey Senozhatsky
                   ` (3 preceding siblings ...)
  2015-03-10 15:08 ` [PATCH 4/6] zram: describe device attrs in documentation Sergey Senozhatsky
@ 2015-03-10 15:08 ` Sergey Senozhatsky
  2015-03-12  1:36   ` Minchan Kim
  2015-03-10 15:08 ` [PATCH 6/6] zram: export new 'mm_stat' " Sergey Senozhatsky
  2015-03-12  1:55 ` [PATCH 0/6] new zram statistics reporting scheme Minchan Kim
  6 siblings, 1 reply; 21+ messages in thread
From: Sergey Senozhatsky @ 2015-03-10 15:08 UTC (permalink / raw)
  To: Andrew Morton, Minchan Kim
  Cc: Nitin Gupta, linux-kernel, Sergey Senozhatsky, Sergey Senozhatsky

Per-device `zram<id>/io_stat' file provides accumulated I/O statistics
of particular zram device in a format similar to block layer statistics.
The file consists of a single line and represents the following stats
(separated by whitespace):
	failed_reads
	failed_writes
	invalid_io
	notify_free

Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
---
 Documentation/ABI/testing/sysfs-block-zram |  9 +++++++++
 Documentation/blockdev/zram.txt            | 12 ++++++++++++
 drivers/block/zram/zram_drv.c              | 20 ++++++++++++++++++++
 3 files changed, 41 insertions(+)

diff --git a/Documentation/ABI/testing/sysfs-block-zram b/Documentation/ABI/testing/sysfs-block-zram
index 91ad707..a7f622f 100644
--- a/Documentation/ABI/testing/sysfs-block-zram
+++ b/Documentation/ABI/testing/sysfs-block-zram
@@ -149,3 +149,12 @@ Description:
 		The compact file is write-only and trigger compaction for
 		allocator zrm uses. The allocator moves some objects so that
 		it could free fragment space.
+
+What:		/sys/block/zram<id>/io_stat
+Date:		August 2015
+Contact:	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
+Description:
+		The io_stat file is read-only and accumulates device's I/O
+		statistics not accounted by block layer. For example,
+		failed_reads, failed_writes, etc. File format is similar to
+		block layer statistics file format.
diff --git a/Documentation/blockdev/zram.txt b/Documentation/blockdev/zram.txt
index 149b49a..eb62792 100644
--- a/Documentation/blockdev/zram.txt
+++ b/Documentation/blockdev/zram.txt
@@ -153,6 +153,18 @@ File /sys/block/zram<id>/stat
 Represents block layer statistics. Read Documentation/block/stat.txt for
 details.
 
+
+File /sys/block/zram<id>/io_stat
+
+The stat file represents device's I/O statistics not accounted by block
+layer and, thus, not available in zram<id>/stat file. It consists of a
+single line of text and contains the following stats separated by
+whitespace:
+	failed_reads
+	failed_writes
+	invalid_io
+	notify_free
+
 9) Deactivate:
 	swapoff /dev/zram0
 	umount /dev/zram1
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 45319eb9..c02121f 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -384,6 +384,25 @@ static ssize_t compact_store(struct device *dev,
 	return len;
 }
 
+static ssize_t io_stat_show(struct device *dev,
+		struct device_attribute *attr, char *buf)
+{
+	struct zram *zram = dev_to_zram(dev);
+	ssize_t ret;
+
+	down_read(&zram->init_lock);
+	ret = scnprintf(buf, PAGE_SIZE,
+			"%8llu %8llu %8llu %8llu\n",
+			(u64)atomic64_read(&zram->stats.failed_reads),
+			(u64)atomic64_read(&zram->stats.failed_writes),
+			(u64)atomic64_read(&zram->stats.invalid_io),
+			(u64)atomic64_read(&zram->stats.notify_free));
+	up_read(&zram->init_lock);
+
+	return ret;
+}
+
+static DEVICE_ATTR_RO(io_stat);
 ZRAM_ATTR_RO(num_reads);
 ZRAM_ATTR_RO(num_writes);
 ZRAM_ATTR_RO(failed_reads);
@@ -1085,6 +1104,7 @@ static struct attribute *zram_disk_attrs[] = {
 	&dev_attr_mem_used_max.attr,
 	&dev_attr_max_comp_streams.attr,
 	&dev_attr_comp_algorithm.attr,
+	&dev_attr_io_stat.attr,
 	NULL,
 };
 
-- 
2.3.2.209.gd67f9d5


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

* [PATCH 6/6] zram: export new 'mm_stat' sysfs attrs
  2015-03-10 15:08 [PATCH 0/6] new zram statistics reporting scheme Sergey Senozhatsky
                   ` (4 preceding siblings ...)
  2015-03-10 15:08 ` [PATCH 5/6] zram: export new 'io_stat' sysfs attrs Sergey Senozhatsky
@ 2015-03-10 15:08 ` Sergey Senozhatsky
  2015-03-12  1:41   ` Minchan Kim
  2015-03-12  1:55 ` [PATCH 0/6] new zram statistics reporting scheme Minchan Kim
  6 siblings, 1 reply; 21+ messages in thread
From: Sergey Senozhatsky @ 2015-03-10 15:08 UTC (permalink / raw)
  To: Andrew Morton, Minchan Kim
  Cc: Nitin Gupta, linux-kernel, Sergey Senozhatsky, Sergey Senozhatsky

Per-device `zram<id>/mm_stat' file provides accumulated mm statistics
of particular zram device in a format similar to block layer statistics.
The file consists of a single line and represents the following stats
(separated by whitespace):
	orig_data_size
	compr_data_size
	mem_used_total
	mem_limit
	mem_used_max
	zero_pages
	num_migrated

Since now we have three stat files (block layer zram<id>/stat,
zram<id>/io_stat and zram<id>/mm_stat) document WARNING about
per-stat sysfs nodes being deprecated.

Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
---
 Documentation/ABI/testing/sysfs-block-zram |  8 ++++++++
 Documentation/blockdev/zram.txt            | 18 +++++++++++++++++
 drivers/block/zram/zram_drv.c              | 31 ++++++++++++++++++++++++++++++
 3 files changed, 57 insertions(+)

diff --git a/Documentation/ABI/testing/sysfs-block-zram b/Documentation/ABI/testing/sysfs-block-zram
index a7f622f..8114c81 100644
--- a/Documentation/ABI/testing/sysfs-block-zram
+++ b/Documentation/ABI/testing/sysfs-block-zram
@@ -158,3 +158,11 @@ Description:
 		statistics not accounted by block layer. For example,
 		failed_reads, failed_writes, etc. File format is similar to
 		block layer statistics file format.
+
+What:		/sys/block/zram<id>/mm_stat
+Date:		August 2015
+Contact:	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
+Description:
+		The mm_stat file is read-only and accumulates device's mm
+		statistics (orig_data_size, compr_data_size, etc.) in a format
+		similar to block layer statistics file format.
diff --git a/Documentation/blockdev/zram.txt b/Documentation/blockdev/zram.txt
index eb62792..faf6270 100644
--- a/Documentation/blockdev/zram.txt
+++ b/Documentation/blockdev/zram.txt
@@ -148,6 +148,10 @@ num_migrated      RO    the number of objects migrated by compaction
 compact           WO    trigger memory compaction
 
 
+WARNING, per-stat sysfs attributes are considered to be deprecated and will
+eventually be removed. User space is advised to use the following files to
+read the device statistics.
+
 File /sys/block/zram<id>/stat
 
 Represents block layer statistics. Read Documentation/block/stat.txt for
@@ -165,6 +169,20 @@ whitespace:
 	invalid_io
 	notify_free
 
+
+File /sys/block/zram<id>/mm_stat
+
+The stat file represents device's mm statistics. It consists of a single
+line of text and contains the following stats separated by whitespace:
+	orig_data_size
+	compr_data_size
+	mem_used_total
+	mem_limit
+	mem_used_max
+	zero_pages
+	num_migrated
+
+
 9) Deactivate:
 	swapoff /dev/zram0
 	umount /dev/zram1
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index c02121f..7493096 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -402,7 +402,37 @@ static ssize_t io_stat_show(struct device *dev,
 	return ret;
 }
 
+static ssize_t mm_stat_show(struct device *dev,
+		struct device_attribute *attr, char *buf)
+{
+	struct zram *zram = dev_to_zram(dev);
+	u64 orig_size, mem_used = 0;
+	long max_used;
+	ssize_t ret;
+
+	down_read(&zram->init_lock);
+	if (init_done(zram))
+		mem_used = zs_get_total_pages(zram->meta->mem_pool);
+
+	orig_size = atomic64_read(&zram->stats.pages_stored);
+	max_used = atomic_long_read(&zram->stats.max_used_pages);
+
+	ret = scnprintf(buf, PAGE_SIZE,
+			"%8llu %8llu %8llu %8lu %8ld %8llu %8llu\n",
+			orig_size << PAGE_SHIFT,
+			(u64)atomic64_read(&zram->stats.compr_data_size),
+			mem_used << PAGE_SHIFT,
+			zram->limit_pages << PAGE_SHIFT,
+			max_used << PAGE_SHIFT,
+			(u64)atomic64_read(&zram->stats.zero_pages),
+			(u64)atomic64_read(&zram->stats.num_migrated));
+	up_read(&zram->init_lock);
+
+	return ret;
+}
+
 static DEVICE_ATTR_RO(io_stat);
+static DEVICE_ATTR_RO(mm_stat);
 ZRAM_ATTR_RO(num_reads);
 ZRAM_ATTR_RO(num_writes);
 ZRAM_ATTR_RO(failed_reads);
@@ -1105,6 +1135,7 @@ static struct attribute *zram_disk_attrs[] = {
 	&dev_attr_max_comp_streams.attr,
 	&dev_attr_comp_algorithm.attr,
 	&dev_attr_io_stat.attr,
+	&dev_attr_mm_stat.attr,
 	NULL,
 };
 
-- 
2.3.2.209.gd67f9d5


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

* Re: [PATCH 1/6] zram: remove `num_migrated' device attr
  2015-03-10 15:08 ` [PATCH 1/6] zram: remove `num_migrated' device attr Sergey Senozhatsky
@ 2015-03-12  1:16   ` Minchan Kim
  2015-03-12  1:22     ` Sergey Senozhatsky
  0 siblings, 1 reply; 21+ messages in thread
From: Minchan Kim @ 2015-03-12  1:16 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Andrew Morton, Nitin Gupta, linux-kernel, Sergey Senozhatsky

On Wed, Mar 11, 2015 at 12:08:29AM +0900, Sergey Senozhatsky wrote:
> Remove sysfs `num_migrated' attribute. We are moving away from
> per-stat device attrs towards 3 stat files that will accumulate
> io and mm stats in a format similar to block layer statistics in
> /sys/block/<dev>/stat. That will be easier to use in user space,
> and reduce the number of syscalls needed to read zram device
> statistics.
> 
> `num_migrated' will return back in zram<id>/mm_stat file.
> 
> Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>

Acked-by: Minchan Kim <minchan@kernel.org>

> ---
>  Documentation/ABI/testing/sysfs-block-zram | 7 -------
>  drivers/block/zram/zram_drv.c              | 2 --
>  2 files changed, 9 deletions(-)
> 
> diff --git a/Documentation/ABI/testing/sysfs-block-zram b/Documentation/ABI/testing/sysfs-block-zram
> index bede902..91ad707 100644
> --- a/Documentation/ABI/testing/sysfs-block-zram
> +++ b/Documentation/ABI/testing/sysfs-block-zram
> @@ -149,10 +149,3 @@ Description:
>  		The compact file is write-only and trigger compaction for
>  		allocator zrm uses. The allocator moves some objects so that
>  		it could free fragment space.
> -
> -What:		/sys/block/zram<id>/num_migrated
> -Date:		August 2015
> -Contact:	Minchan Kim <minchan@kernel.org>
> -Description:
> -		The compact file is read-only and shows how many object
                     ^^^^^

Argh, I believe you will correct it in later patch.

Thanks.

-- 
Kind regards,
Minchan Kim

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

* Re: [PATCH 1/6] zram: remove `num_migrated' device attr
  2015-03-12  1:16   ` Minchan Kim
@ 2015-03-12  1:22     ` Sergey Senozhatsky
  0 siblings, 0 replies; 21+ messages in thread
From: Sergey Senozhatsky @ 2015-03-12  1:22 UTC (permalink / raw)
  To: Minchan Kim
  Cc: Sergey Senozhatsky, Andrew Morton, Nitin Gupta, linux-kernel,
	Sergey Senozhatsky


Hello,

On (03/12/15 10:16), Minchan Kim wrote:
> > -What:		/sys/block/zram<id>/num_migrated
> > -Date:		August 2015
> > -Contact:	Minchan Kim <minchan@kernel.org>
> > -Description:
> > -		The compact file is read-only and shows how many object
>                      ^^^^^
> 
> Argh, I believe you will correct it in later patch.
> 

it's documented as "num_migrated  --  the number of objects migrated by compaction"
in later patch.

	-ss

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

* Re: [PATCH 2/6] zram: move compact_store() to sysfs functions area
  2015-03-10 15:08 ` [PATCH 2/6] zram: move compact_store() to sysfs functions area Sergey Senozhatsky
@ 2015-03-12  1:24   ` Minchan Kim
  0 siblings, 0 replies; 21+ messages in thread
From: Minchan Kim @ 2015-03-12  1:24 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Andrew Morton, Nitin Gupta, linux-kernel, Sergey Senozhatsky

On Wed, Mar 11, 2015 at 12:08:30AM +0900, Sergey Senozhatsky wrote:
> A cosmetic change. We have a new code layout and keep zram per-device
> sysfs store and show functions in one place. Move compact_store() to
> that handlers block to conform to current layout.
> 
> Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Acked-by: Minchan Kim <minchan@kernel.org>

I should have done by myself.

Thanks, Sergey!

-- 
Kind regards,
Minchan Kim

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

* Re: [PATCH 3/6] zram: use generic start/end io accounting
  2015-03-10 15:08 ` [PATCH 3/6] zram: use generic start/end io accounting Sergey Senozhatsky
@ 2015-03-12  1:25   ` Minchan Kim
  0 siblings, 0 replies; 21+ messages in thread
From: Minchan Kim @ 2015-03-12  1:25 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Andrew Morton, Nitin Gupta, linux-kernel, Sergey Senozhatsky

On Wed, Mar 11, 2015 at 12:08:31AM +0900, Sergey Senozhatsky wrote:
> Use bio generic_start_io_acct() and generic_end_io_acct() to account
> device's block layer statistics. This will let users to monitor zram
> activities using sysstat and similar packages/tools.

Yay, Thanks!

> 
> Apart from the usual per-stat sysfs attr, zram IO stats are now also
> available in '/sys/block/zram<id>/stat' and '/proc/diskstats' files.
> 
> We will slowly get rid of per-stat sysfs files.
> 
> Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Acked-by: Minchan Kim <minchan@kernel.org>

-- 
Kind regards,
Minchan Kim

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

* Re: [PATCH 4/6] zram: describe device attrs in documentation
  2015-03-10 15:08 ` [PATCH 4/6] zram: describe device attrs in documentation Sergey Senozhatsky
@ 2015-03-12  1:33   ` Minchan Kim
  2015-03-12  1:47     ` Sergey Senozhatsky
  0 siblings, 1 reply; 21+ messages in thread
From: Minchan Kim @ 2015-03-12  1:33 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Andrew Morton, Nitin Gupta, linux-kernel, Sergey Senozhatsky

On Wed, Mar 11, 2015 at 12:08:32AM +0900, Sergey Senozhatsky wrote:
> Briefly describe exported device stat attrs in zram documentation.
> We will eventually get rid of per-stat sysfs nodes and, thus,
> clean up Documentation/ABI/testing/sysfs-block-zram file, which is
> the only source of information about device sysfs nodes.
> 
> Add `num_migrated' description, since there is no independent
> `num_migrated' sysfs node (and no corresponding sysfs-block-zram
> entry), it will be exported via zram<id>/mm_stat file.
> 
> At this point we can provide minimal attrs description, because
> sysfs-block-zram still contains detailed information.
> 
> Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>

FYI, git-am got failed based on next-2015311 but patch tool worked.

> ---
>  Documentation/blockdev/zram.txt | 49 +++++++++++++++++++++++++++++------------
>  1 file changed, 35 insertions(+), 14 deletions(-)
> 
> diff --git a/Documentation/blockdev/zram.txt b/Documentation/blockdev/zram.txt
> index 902c97c..149b49a 100644
> --- a/Documentation/blockdev/zram.txt
> +++ b/Documentation/blockdev/zram.txt
> @@ -117,20 +117,41 @@ execute
>  	echo X > /sys/class/zram-control/zram_remove
>  
>  8) Stats:
> -	Per-device statistics are exported as various nodes under
> -	/sys/block/zram<id>/
> -		disksize
> -		num_reads
> -		num_writes
> -		failed_reads
> -		failed_writes
> -		invalid_io
> -		notify_free
> -		zero_pages
> -		orig_data_size
> -		compr_data_size
> -		mem_used_total
> -		mem_used_max
> +Per-device statistics are exported as various nodes under /sys/block/zram<id>/
> +
> +A brief description of exported device attritbutes. For more details please
> +read Documentation/ABI/testing/sysfs-block-zram.
> +
> +Name             mode             description
> +----            ------            -----------
> +disksize          RO    disk size

disksize is RW

> +initstate         RO    shows the initialization state of the device
> +reset             WO    trigger device reset
> +num_reads         RO    the number of reads
> +failed_reads      RO    the number of failed reads
> +num_write         RO    the number of writes
> +failed_writes     RO    the number of failed writes
> +invalid_io        RO    the number of non-page-size-aligned I/O requests
> +max_comp_streams  RW    the number of possible concurrent compress operations
> +comp_algorithm    RW    show and change the compression algorithm
> +notify_free       RO    the number of notifications to free pages (either
> +                        slot free notifications or REQ_DISCARD requests)
> +zero_pages        RO    the number of zero filled pages written to this disk
> +orig_data_size    RO    uncompressed size of data stored in this disk
> +compr_data_size   RO    compressed size of data stored in this disk
> +mem_used_total    RO    the amount of memory allocated for this disk
> +mem_used_max      RW    the maximum amount of memory zram have consumed to
> +                        store compressed data
> +mem_limit         RW    the maximum amount of memory ZRAM can use to store
> +                        the compressed data
> +num_migrated      RO    the number of objects migrated by compaction
> +compact           WO    trigger memory compaction

Otherwise, looks cleaner!
Thanks!
 

-- 
Kind regards,
Minchan Kim

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

* Re: [PATCH 5/6] zram: export new 'io_stat' sysfs attrs
  2015-03-10 15:08 ` [PATCH 5/6] zram: export new 'io_stat' sysfs attrs Sergey Senozhatsky
@ 2015-03-12  1:36   ` Minchan Kim
  0 siblings, 0 replies; 21+ messages in thread
From: Minchan Kim @ 2015-03-12  1:36 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Andrew Morton, Nitin Gupta, linux-kernel, Sergey Senozhatsky

On Wed, Mar 11, 2015 at 12:08:33AM +0900, Sergey Senozhatsky wrote:
> Per-device `zram<id>/io_stat' file provides accumulated I/O statistics
> of particular zram device in a format similar to block layer statistics.
> The file consists of a single line and represents the following stats
> (separated by whitespace):
> 	failed_reads
> 	failed_writes
> 	invalid_io
> 	notify_free
> 
> Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Acked-by: Minchan Kim <minchan@kernel.org>

-- 
Kind regards,
Minchan Kim

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

* Re: [PATCH 6/6] zram: export new 'mm_stat' sysfs attrs
  2015-03-10 15:08 ` [PATCH 6/6] zram: export new 'mm_stat' " Sergey Senozhatsky
@ 2015-03-12  1:41   ` Minchan Kim
  2015-03-12  1:54     ` Sergey Senozhatsky
  0 siblings, 1 reply; 21+ messages in thread
From: Minchan Kim @ 2015-03-12  1:41 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Andrew Morton, Nitin Gupta, linux-kernel, Sergey Senozhatsky

On Wed, Mar 11, 2015 at 12:08:34AM +0900, Sergey Senozhatsky wrote:
> Per-device `zram<id>/mm_stat' file provides accumulated mm statistics
> of particular zram device in a format similar to block layer statistics.
> The file consists of a single line and represents the following stats
> (separated by whitespace):
> 	orig_data_size
> 	compr_data_size
> 	mem_used_total
> 	mem_limit
> 	mem_used_max
> 	zero_pages
> 	num_migrated
> 
> Since now we have three stat files (block layer zram<id>/stat,
> zram<id>/io_stat and zram<id>/mm_stat) document WARNING about
> per-stat sysfs nodes being deprecated.

Any user doesn't take care of document. I think we should add
pr_warn_once to notify the user if he tried deprecated interface.
In addition, we should add deprecated interface in Documentation/ABI/obsolete/

> 
> Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
> ---
>  Documentation/ABI/testing/sysfs-block-zram |  8 ++++++++
>  Documentation/blockdev/zram.txt            | 18 +++++++++++++++++
>  drivers/block/zram/zram_drv.c              | 31 ++++++++++++++++++++++++++++++
>  3 files changed, 57 insertions(+)
> 
> diff --git a/Documentation/ABI/testing/sysfs-block-zram b/Documentation/ABI/testing/sysfs-block-zram
> index a7f622f..8114c81 100644
> --- a/Documentation/ABI/testing/sysfs-block-zram
> +++ b/Documentation/ABI/testing/sysfs-block-zram
> @@ -158,3 +158,11 @@ Description:
>  		statistics not accounted by block layer. For example,
>  		failed_reads, failed_writes, etc. File format is similar to
>  		block layer statistics file format.
> +
> +What:		/sys/block/zram<id>/mm_stat
> +Date:		August 2015
> +Contact:	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
> +Description:
> +		The mm_stat file is read-only and accumulates device's mm
> +		statistics (orig_data_size, compr_data_size, etc.) in a format

Every field in mm_stat doesn't mean accumulation.

-- 
Kind regards,
Minchan Kim

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

* Re: [PATCH 4/6] zram: describe device attrs in documentation
  2015-03-12  1:33   ` Minchan Kim
@ 2015-03-12  1:47     ` Sergey Senozhatsky
  0 siblings, 0 replies; 21+ messages in thread
From: Sergey Senozhatsky @ 2015-03-12  1:47 UTC (permalink / raw)
  To: Minchan Kim
  Cc: Sergey Senozhatsky, Andrew Morton, Nitin Gupta, linux-kernel,
	Sergey Senozhatsky

On (03/12/15 10:33), Minchan Kim wrote:
> FYI, git-am got failed based on next-2015311 but patch tool worked.
> 

hm... oh, do you have this one applied

	From: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
	Subject: zram: do not let user enforce new device dev_id

	This patch forbids user to enforce device ids for newly added zram
	devices, as suggested by Minchan Kim.  There seems to be a little interest
	in this functionality and its use-cases are rather non-obvious.
	[..]

?

it does some documentation "rollbacks"

     Documentation/blockdev/zram.txt            |   20 +-

that is probably the reason.



> > +----            ------            -----------
> > +disksize          RO    disk size
> 
> disksize is RW
> 

ah, good catch! will send a trivial patch later.


Thanks for review!

	-ss

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

* Re: [PATCH 6/6] zram: export new 'mm_stat' sysfs attrs
  2015-03-12  1:41   ` Minchan Kim
@ 2015-03-12  1:54     ` Sergey Senozhatsky
  0 siblings, 0 replies; 21+ messages in thread
From: Sergey Senozhatsky @ 2015-03-12  1:54 UTC (permalink / raw)
  To: Minchan Kim
  Cc: Sergey Senozhatsky, Andrew Morton, Nitin Gupta, linux-kernel,
	Sergey Senozhatsky

On (03/12/15 10:41), Minchan Kim wrote:
> Any user doesn't take care of document. I think we should add
> pr_warn_once to notify the user if he tried deprecated interface.

yes, that was something I didn't want to include into this patch.
I agree that some sort of a warning should go into the logs. do
you want me to add pr_warn_once() to every _show() function?

having this in documentation will not do any harm, so let's keep it
there as well.

> In addition, we should add deprecated interface in Documentation/ABI/obsolete/
> 

didn't know about that. ok, will send "deprecate old attrs" patch that will
add deprecated attrs to Documentation/ABI/obsolete/ and add pr_warn_once().


> > 
> > Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
> > ---
> >  Documentation/ABI/testing/sysfs-block-zram |  8 ++++++++
> >  Documentation/blockdev/zram.txt            | 18 +++++++++++++++++
> >  drivers/block/zram/zram_drv.c              | 31 ++++++++++++++++++++++++++++++
> >  3 files changed, 57 insertions(+)
> > 
> > diff --git a/Documentation/ABI/testing/sysfs-block-zram b/Documentation/ABI/testing/sysfs-block-zram
> > index a7f622f..8114c81 100644
> > --- a/Documentation/ABI/testing/sysfs-block-zram
> > +++ b/Documentation/ABI/testing/sysfs-block-zram
> > @@ -158,3 +158,11 @@ Description:
> >  		statistics not accounted by block layer. For example,
> >  		failed_reads, failed_writes, etc. File format is similar to
> >  		block layer statistics file format.
> > +
> > +What:		/sys/block/zram<id>/mm_stat
> > +Date:		August 2015
> > +Contact:	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
> > +Description:
> > +		The mm_stat file is read-only and accumulates device's mm
> > +		statistics (orig_data_size, compr_data_size, etc.) in a format
> 
> Every field in mm_stat doesn't mean accumulation.
> 

agree. bad wording. only num_migrated shows the accumulated number.
will send a trivial patch later.

	-ss

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

* Re: [PATCH 0/6] new zram statistics reporting scheme
  2015-03-10 15:08 [PATCH 0/6] new zram statistics reporting scheme Sergey Senozhatsky
                   ` (5 preceding siblings ...)
  2015-03-10 15:08 ` [PATCH 6/6] zram: export new 'mm_stat' " Sergey Senozhatsky
@ 2015-03-12  1:55 ` Minchan Kim
  2015-03-12  2:16   ` Sergey Senozhatsky
  6 siblings, 1 reply; 21+ messages in thread
From: Minchan Kim @ 2015-03-12  1:55 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Andrew Morton, Nitin Gupta, linux-kernel, Sergey Senozhatsky

Hi Sergey,

On Wed, Mar 11, 2015 at 12:08:28AM +0900, Sergey Senozhatsky wrote:
> Hello,
> 
> This patch introduces rework to zram stats. We have per-stat sysfs
> nodes, and it makes things a bit hard to use in user space: it doesn't
> give an immediate stats 'snapshot', it requires user space to use
> more syscals -- open, read, close for every stat file, with 
> appropriate error checks on every step, etc.
> 
> First, zram now accounts block layer statistics. available in
> /sys/block/zram<id>/stat and /proc/diskstats files. So some new
> stats are available (see Documentation/block/stat.txt), besides,
> zram's activities are now can be monitored by sysstat's iostat
> or similar tools.
> 
> Example:
> cat /sys/block/zram0/stat
> 248     0    1984    0   251029     0  2008232   5120   0   5116   5116
> 
> 
> 
> Second, group currently exported on per-stat basis nodes into two
> categories (files):
> 
> -- zram<id>/io_stat
> accumulates device's IO stats, that are not accounted by block layer,
> and contains:
>         failed_reads
>         failed_writes
>         invalid_io
>         notify_free
> 
> Example:
> cat /sys/block/zram0/io_stat
> 0        0        0   652572
> 
> 
> -- zram<id>/mm_stat
> accumulates zram mm stats and contains:
>         orig_data_size
>         compr_data_size
>         mem_used_total
>         mem_limit
>         mem_used_max
>         zero_pages
>         num_migrated
> 
> Example:
> cat /sys/block/zram0/mm_stat
> 434634752 270288572 279158784        0 579895296    15060        0
> 
> 
> per-stat sysfs nodes are now considered to be deprecated and we plan
> to remove them (and clean up some of the existing stat code) in two
> years (as of now, there is no warning printed to syslog about deprecated
> stats being used). user space is advised to use the above mentioned 3
> files.
> 
> 
> note:
> util-linux mailing list is not Cc-ed into this series. once we settle
> it down, I'll write to Karel. (we have several months ahead until 4.1
> will be released).

I really appreciate you enhance stat functions, esp, working with iostat!

One thing I want to discuss is sometime we could remove RO fields
in /sys/block/zram/ but we couldn't remove RW fields because
io_stat/mm_stat doesn't have any writable option now so users will
have two options to read stat. For exmaple,

        cat /sys/block/zram/mem_used_max
        cat /sys/block/zram/mm_stat | awk friend

How about changing only writeable, not readable for duplicated stats
in /sys/block/zram? So, user will have writeable stat to set some
options in /sys/block/zram and readable stat to get some data in
/sys/block/zram/[io|mm]_stat if the stat is duplicated in both.


-- 
Kind regards,
Minchan Kim

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

* Re: [PATCH 0/6] new zram statistics reporting scheme
  2015-03-12  1:55 ` [PATCH 0/6] new zram statistics reporting scheme Minchan Kim
@ 2015-03-12  2:16   ` Sergey Senozhatsky
  2015-03-12  5:03     ` Sergey Senozhatsky
  2015-03-12  5:11     ` Minchan Kim
  0 siblings, 2 replies; 21+ messages in thread
From: Sergey Senozhatsky @ 2015-03-12  2:16 UTC (permalink / raw)
  To: Minchan Kim
  Cc: Sergey Senozhatsky, Andrew Morton, Nitin Gupta, linux-kernel,
	Sergey Senozhatsky

On (03/12/15 10:55), Minchan Kim wrote:
> I really appreciate you enhance stat functions, esp, working with iostat!

thanks! my pleasure.

> One thing I want to discuss is sometime we could remove RO fields
> in /sys/block/zram/ but we couldn't remove RW fields because
> io_stat/mm_stat doesn't have any writable option now so users will
> have two options to read stat. For exmaple,

I played with CONFIG_ZRAM_OLD_STATS option, which turns RW attrs into
WO attrs (where possible/needed). but it turned out to be a rather
ugly patch and I eventually decided that I don't want to have these
#ifdef-s in zram code for the next two years. so providing both RW/RO
old stats (with a warning in the logs) and RO [mm|io]_stat sound like
a better plan.

>         cat /sys/block/zram/mem_used_max
>         cat /sys/block/zram/mm_stat | awk friend
> 
> How about changing only writeable, not readable for duplicated stats
> in /sys/block/zram? So, user will have writeable stat to set some
> options in /sys/block/zram and readable stat to get some data in
> /sys/block/zram/[io|mm]_stat if the stat is duplicated in both.

Sorry, I probably didn't drink enough coffee today, can you please
rephrase or give a trivial example?

		-ss

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

* Re: [PATCH 0/6] new zram statistics reporting scheme
  2015-03-12  2:16   ` Sergey Senozhatsky
@ 2015-03-12  5:03     ` Sergey Senozhatsky
  2015-03-12  5:11     ` Minchan Kim
  1 sibling, 0 replies; 21+ messages in thread
From: Sergey Senozhatsky @ 2015-03-12  5:03 UTC (permalink / raw)
  To: Minchan Kim
  Cc: ergey Senozhatsky, Sergey Senozhatsky, Andrew Morton,
	Nitin Gupta, linux-kernel

On (03/12/15 11:16), Sergey Senozhatsky wrote:
> >         cat /sys/block/zram/mem_used_max
> >         cat /sys/block/zram/mm_stat | awk friend
> > 
> > How about changing only writeable, not readable for duplicated stats
> > in /sys/block/zram? So, user will have writeable stat to set some
> > options in /sys/block/zram and readable stat to get some data in
> > /sys/block/zram/[io|mm]_stat if the stat is duplicated in both.
> 

did you mean:

-- attrs that are currently RW will eventually turn into WO. attr show()
   will be done by [mm|io]_stat file.

-- attrs that are currently RO will be removed. attr show() will be
   done by [mm|io]_stat file.

?

so, iow, rather than removing all duplicated attrs we remove only RO attrs
and keep previously RW attrs in write-only mode.

	-ss

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

* Re: [PATCH 0/6] new zram statistics reporting scheme
  2015-03-12  2:16   ` Sergey Senozhatsky
  2015-03-12  5:03     ` Sergey Senozhatsky
@ 2015-03-12  5:11     ` Minchan Kim
  2015-03-12  5:24       ` Sergey Senozhatsky
  1 sibling, 1 reply; 21+ messages in thread
From: Minchan Kim @ 2015-03-12  5:11 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Sergey Senozhatsky, Andrew Morton, Nitin Gupta, linux-kernel

On Thu, Mar 12, 2015 at 11:16:09AM +0900, Sergey Senozhatsky wrote:
> On (03/12/15 10:55), Minchan Kim wrote:
> > I really appreciate you enhance stat functions, esp, working with iostat!
> 
> thanks! my pleasure.
> 
> > One thing I want to discuss is sometime we could remove RO fields
> > in /sys/block/zram/ but we couldn't remove RW fields because
> > io_stat/mm_stat doesn't have any writable option now so users will
> > have two options to read stat. For exmaple,
> 
> I played with CONFIG_ZRAM_OLD_STATS option, which turns RW attrs into
> WO attrs (where possible/needed). but it turned out to be a rather
> ugly patch and I eventually decided that I don't want to have these
> #ifdef-s in zram code for the next two years. so providing both RW/RO
> old stats (with a warning in the logs) and RO [mm|io]_stat sound like
> a better plan.

I think we don't need CONFIG_ZRAM_OLD_STATS.
For example, for mem_used_max, we could add pr_warn_once in
*mem_used_max_show* but not *mem_used_max_store*. so, old users will see
deprecated message when they try to *read* the vaule old stat while they
will write new value.
One or two year later, we could remove mem_used_max_show then everyone
should read the vaule /sys/block/zram0/mm_stat.

> 
> >         cat /sys/block/zram/mem_used_max
> >         cat /sys/block/zram/mm_stat | awk friend
> > 
> > How about changing only writeable, not readable for duplicated stats
> > in /sys/block/zram? So, user will have writeable stat to set some
> > options in /sys/block/zram and readable stat to get some data in
> > /sys/block/zram/[io|mm]_stat if the stat is duplicated in both.
> 
> Sorry, I probably didn't drink enough coffee today, can you please
> rephrase or give a trivial example?

Sorry, I was vague. I meant users can read the vaule for
mem_used_max and mem_limit in two places(ie, /sys/block/zram/
and /sys/block/zram/mm_stat). If we feel it's handy for user,
i am not against that. But if there is no reason, I want to
make /sys/block/zram/ stat write-only if it is possible stat
like mem_used_max. I guess It's easier rule for user.


> 
> 		-ss

-- 
Kind regards,
Minchan Kim

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

* Re: [PATCH 0/6] new zram statistics reporting scheme
  2015-03-12  5:11     ` Minchan Kim
@ 2015-03-12  5:24       ` Sergey Senozhatsky
  0 siblings, 0 replies; 21+ messages in thread
From: Sergey Senozhatsky @ 2015-03-12  5:24 UTC (permalink / raw)
  To: Minchan Kim
  Cc: Sergey Senozhatsky, Sergey Senozhatsky, Andrew Morton,
	Nitin Gupta, linux-kernel

On (03/12/15 14:11), Minchan Kim wrote:
> I think we don't need CONFIG_ZRAM_OLD_STATS.
> For example, for mem_used_max, we could add pr_warn_once in
> *mem_used_max_show* but not *mem_used_max_store*. so, old users will see
> deprecated message when they try to *read* the vaule old stat while they
> will write new value.
> One or two year later, we could remove mem_used_max_show then everyone
> should read the vaule /sys/block/zram0/mm_stat.
> 
> > 
> > >         cat /sys/block/zram/mem_used_max
> > >         cat /sys/block/zram/mm_stat | awk friend
> > > 
> > > How about changing only writeable, not readable for duplicated stats
> > > in /sys/block/zram? So, user will have writeable stat to set some
> > > options in /sys/block/zram and readable stat to get some data in
> > > /sys/block/zram/[io|mm]_stat if the stat is duplicated in both.
> > 
> > Sorry, I probably didn't drink enough coffee today, can you please
> > rephrase or give a trivial example?
> 
> Sorry, I was vague. I meant users can read the vaule for
> mem_used_max and mem_limit in two places(ie, /sys/block/zram/
> and /sys/block/zram/mm_stat). If we feel it's handy for user,
> i am not against that. But if there is no reason, I want to
> make /sys/block/zram/ stat write-only if it is possible stat
> like mem_used_max. I guess It's easier rule for user.

in a long term -- yes. duplication must go away. we provide [mm|io]_stat
nodes to do stats show.

so,
-- RW will be downgraded to WO
-- RO will be removed

(I'm talking about those attrs that are currently visible in two
places -- the original per-stat sysfs node and new [mm|io]_stat node).


and this is what CONFIG_ZRAM_OLD_STATS was doing: downgrade of RW to WO,
removal of some RO attrs. but I'd prefer to go with warn once plan and
do this downgrade/removal manually two years later.

	-ss

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

end of thread, other threads:[~2015-03-12  5:24 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-10 15:08 [PATCH 0/6] new zram statistics reporting scheme Sergey Senozhatsky
2015-03-10 15:08 ` [PATCH 1/6] zram: remove `num_migrated' device attr Sergey Senozhatsky
2015-03-12  1:16   ` Minchan Kim
2015-03-12  1:22     ` Sergey Senozhatsky
2015-03-10 15:08 ` [PATCH 2/6] zram: move compact_store() to sysfs functions area Sergey Senozhatsky
2015-03-12  1:24   ` Minchan Kim
2015-03-10 15:08 ` [PATCH 3/6] zram: use generic start/end io accounting Sergey Senozhatsky
2015-03-12  1:25   ` Minchan Kim
2015-03-10 15:08 ` [PATCH 4/6] zram: describe device attrs in documentation Sergey Senozhatsky
2015-03-12  1:33   ` Minchan Kim
2015-03-12  1:47     ` Sergey Senozhatsky
2015-03-10 15:08 ` [PATCH 5/6] zram: export new 'io_stat' sysfs attrs Sergey Senozhatsky
2015-03-12  1:36   ` Minchan Kim
2015-03-10 15:08 ` [PATCH 6/6] zram: export new 'mm_stat' " Sergey Senozhatsky
2015-03-12  1:41   ` Minchan Kim
2015-03-12  1:54     ` Sergey Senozhatsky
2015-03-12  1:55 ` [PATCH 0/6] new zram statistics reporting scheme Minchan Kim
2015-03-12  2:16   ` Sergey Senozhatsky
2015-03-12  5:03     ` Sergey Senozhatsky
2015-03-12  5:11     ` Minchan Kim
2015-03-12  5:24       ` Sergey Senozhatsky

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).