diff options
author | Sergey Senozhatsky <sergey.senozhatsky@gmail.com> | 2015-04-15 19:16:03 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-15 19:35:21 -0400 |
commit | 2f6a3bed7347ee94fe57b3501fddaa646a26d890 (patch) | |
tree | ddbe3dca838dea06f3639394bf36bd5b4f10ee31 | |
parent | 77ba015f9d5c584226a634753e9b318cb272cd41 (diff) |
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: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Acked-by: Minchan Kim <minchan@kernel.org>
Cc: Nitin Gupta <ngupta@vflare.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | Documentation/ABI/testing/sysfs-block-zram | 9 | ||||
-rw-r--r-- | Documentation/blockdev/zram.txt | 11 | ||||
-rw-r--r-- | drivers/block/zram/zram_drv.c | 20 |
3 files changed, 40 insertions, 0 deletions
diff --git a/Documentation/ABI/testing/sysfs-block-zram b/Documentation/ABI/testing/sysfs-block-zram index 91ad7071b9e8..a7f622f9bcf6 100644 --- a/Documentation/ABI/testing/sysfs-block-zram +++ b/Documentation/ABI/testing/sysfs-block-zram | |||
@@ -149,3 +149,12 @@ Description: | |||
149 | The compact file is write-only and trigger compaction for | 149 | The compact file is write-only and trigger compaction for |
150 | allocator zrm uses. The allocator moves some objects so that | 150 | allocator zrm uses. The allocator moves some objects so that |
151 | it could free fragment space. | 151 | it could free fragment space. |
152 | |||
153 | What: /sys/block/zram<id>/io_stat | ||
154 | Date: August 2015 | ||
155 | Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> | ||
156 | Description: | ||
157 | The io_stat file is read-only and accumulates device's I/O | ||
158 | statistics not accounted by block layer. For example, | ||
159 | failed_reads, failed_writes, etc. File format is similar to | ||
160 | block layer statistics file format. | ||
diff --git a/Documentation/blockdev/zram.txt b/Documentation/blockdev/zram.txt index 971765ed5ac1..9610be3e9d36 100644 --- a/Documentation/blockdev/zram.txt +++ b/Documentation/blockdev/zram.txt | |||
@@ -133,6 +133,17 @@ File /sys/block/zram<id>/stat | |||
133 | Represents block layer statistics. Read Documentation/block/stat.txt for | 133 | Represents block layer statistics. Read Documentation/block/stat.txt for |
134 | details. | 134 | details. |
135 | 135 | ||
136 | File /sys/block/zram<id>/io_stat | ||
137 | |||
138 | The stat file represents device's I/O statistics not accounted by block | ||
139 | layer and, thus, not available in zram<id>/stat file. It consists of a | ||
140 | single line of text and contains the following stats separated by | ||
141 | whitespace: | ||
142 | failed_reads | ||
143 | failed_writes | ||
144 | invalid_io | ||
145 | notify_free | ||
146 | |||
136 | 8) Deactivate: | 147 | 8) Deactivate: |
137 | swapoff /dev/zram0 | 148 | swapoff /dev/zram0 |
138 | umount /dev/zram1 | 149 | umount /dev/zram1 |
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 35dafd9a0350..1b63a717bdbb 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c | |||
@@ -1033,6 +1033,25 @@ static DEVICE_ATTR_RW(mem_used_max); | |||
1033 | static DEVICE_ATTR_RW(max_comp_streams); | 1033 | static DEVICE_ATTR_RW(max_comp_streams); |
1034 | static DEVICE_ATTR_RW(comp_algorithm); | 1034 | static DEVICE_ATTR_RW(comp_algorithm); |
1035 | 1035 | ||
1036 | static ssize_t io_stat_show(struct device *dev, | ||
1037 | struct device_attribute *attr, char *buf) | ||
1038 | { | ||
1039 | struct zram *zram = dev_to_zram(dev); | ||
1040 | ssize_t ret; | ||
1041 | |||
1042 | down_read(&zram->init_lock); | ||
1043 | ret = scnprintf(buf, PAGE_SIZE, | ||
1044 | "%8llu %8llu %8llu %8llu\n", | ||
1045 | (u64)atomic64_read(&zram->stats.failed_reads), | ||
1046 | (u64)atomic64_read(&zram->stats.failed_writes), | ||
1047 | (u64)atomic64_read(&zram->stats.invalid_io), | ||
1048 | (u64)atomic64_read(&zram->stats.notify_free)); | ||
1049 | up_read(&zram->init_lock); | ||
1050 | |||
1051 | return ret; | ||
1052 | } | ||
1053 | |||
1054 | static DEVICE_ATTR_RO(io_stat); | ||
1036 | ZRAM_ATTR_RO(num_reads); | 1055 | ZRAM_ATTR_RO(num_reads); |
1037 | ZRAM_ATTR_RO(num_writes); | 1056 | ZRAM_ATTR_RO(num_writes); |
1038 | ZRAM_ATTR_RO(failed_reads); | 1057 | ZRAM_ATTR_RO(failed_reads); |
@@ -1060,6 +1079,7 @@ static struct attribute *zram_disk_attrs[] = { | |||
1060 | &dev_attr_mem_used_max.attr, | 1079 | &dev_attr_mem_used_max.attr, |
1061 | &dev_attr_max_comp_streams.attr, | 1080 | &dev_attr_max_comp_streams.attr, |
1062 | &dev_attr_comp_algorithm.attr, | 1081 | &dev_attr_comp_algorithm.attr, |
1082 | &dev_attr_io_stat.attr, | ||
1063 | NULL, | 1083 | NULL, |
1064 | }; | 1084 | }; |
1065 | 1085 | ||