Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f6a3bed authored by Sergey Senozhatsky's avatar Sergey Senozhatsky Committed by Linus Torvalds
Browse files

zram: export new 'io_stat' sysfs attrs



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: default avatarSergey Senozhatsky <sergey.senozhatsky@gmail.com>
Acked-by: default avatarMinchan Kim <minchan@kernel.org>
Cc: Nitin Gupta <ngupta@vflare.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 77ba015f
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -149,3 +149,12 @@ Description:
		The compact file is write-only and trigger compaction for
		The compact file is write-only and trigger compaction for
		allocator zrm uses. The allocator moves some objects so that
		allocator zrm uses. The allocator moves some objects so that
		it could free fragment space.
		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.
+11 −0
Original line number Original line Diff line number Diff line
@@ -133,6 +133,17 @@ File /sys/block/zram<id>/stat
Represents block layer statistics. Read Documentation/block/stat.txt for
Represents block layer statistics. Read Documentation/block/stat.txt for
details.
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

8) Deactivate:
8) Deactivate:
	swapoff /dev/zram0
	swapoff /dev/zram0
	umount /dev/zram1
	umount /dev/zram1
+20 −0
Original line number Original line Diff line number Diff line
@@ -1033,6 +1033,25 @@ static DEVICE_ATTR_RW(mem_used_max);
static DEVICE_ATTR_RW(max_comp_streams);
static DEVICE_ATTR_RW(max_comp_streams);
static DEVICE_ATTR_RW(comp_algorithm);
static DEVICE_ATTR_RW(comp_algorithm);


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_reads);
ZRAM_ATTR_RO(num_writes);
ZRAM_ATTR_RO(num_writes);
ZRAM_ATTR_RO(failed_reads);
ZRAM_ATTR_RO(failed_reads);
@@ -1060,6 +1079,7 @@ static struct attribute *zram_disk_attrs[] = {
	&dev_attr_mem_used_max.attr,
	&dev_attr_mem_used_max.attr,
	&dev_attr_max_comp_streams.attr,
	&dev_attr_max_comp_streams.attr,
	&dev_attr_comp_algorithm.attr,
	&dev_attr_comp_algorithm.attr,
	&dev_attr_io_stat.attr,
	NULL,
	NULL,
};
};