diff --git a/Template Active OS Linux Disk Performance.xml b/Template Active OS Linux Disk Performance.xml
new file mode 100644
index 0000000..15d43ba
--- /dev/null
+++ b/Template Active OS Linux Disk Performance.xml
@@ -0,0 +1,1478 @@
+
+
+ 4.0
+ 2019-03-22T19:44:41Z
+
+
+ Templates
+
+
+
+
+ Template Active OS Linux Disk Performance
+ Template Active OS Linux Disk Performance
+ https://www.kernel.org/doc/Documentation/iostats.txt
+
+
+ Templates
+
+
+
+
+ Disk Performance
+
+
+
+
+
+ Disk discovery
+ 7
+
+
+ custom.vfs.dev.discovery
+ 1h
+ 0
+
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+
+ 0
+
+
+
+ 5d
+
+
+
+ Disk:$1:Discards:Merged
+ 7
+
+
+ custom.vfs.dev.discards.merged[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 3
+
+ ops/s
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+ Field 13 -- # of discards merged
+ See the description of field 2
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 10
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:Discards:ms
+ 7
+
+
+ custom.vfs.dev.discards.ms[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 3
+
+ ms
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+ Field 10 -- # of milliseconds spent doing I/Os
+ This field increases so long as field 9 is nonzero.
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 10
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:Discards:Ops per second
+ 7
+
+
+ custom.vfs.dev.discards.ops[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 3
+
+ ops/s
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+ Field 12 -- # of discards completed
+ This is the total number of discards completed successfully.
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 10
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:IO:Currently Active
+ 7
+
+
+ custom.vfs.dev.io.active[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 3
+
+ io
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+ Field 9 -- # of I/Os currently in progress
+ The only field that should go to zero. Incremented as requests are
+ given to appropriate struct request_queue and decremented as they finish.
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 1
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:Util
+ 7
+
+
+ custom.vfs.dev.io.ms[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 3
+
+ %
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+ Field 10 -- # of milliseconds spent doing I/Os
+ This field increases so long as field 9 is nonzero.
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 1
+ 0.1
+
+
+ 10
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:Read:Latency
+ 15
+
+
+ custom.vfs.dev.read.latency[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 3
+
+ ms
+
+
+ 0
+ 0
+
+ 0
+
+ custom.vfs.dev.read.ms[{#DEVICENAME}] / custom.vfs.dev.read.ops[{#DEVICENAME}] / 1000
+
+ 0
+
+
+
+
+
+ 4 / 1
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 10
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:Read:Merged
+ 7
+
+
+ custom.vfs.dev.read.merged[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 0
+
+ Ops/s
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+ Field 2 -- # of reads merged, field 6 -- # of writes merged
+ Reads and writes which are adjacent to each other may be merged for
+ efficiency. Thus two 4K reads may become one 8K read before it is
+ ultimately handed to the disk, and so it will be counted (and queued)
+ as only one I/O. This field lets you know how often this was done.
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 10
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 1
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:Read:ms
+ 7
+
+
+ custom.vfs.dev.read.ms[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 0
+
+ ms
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+ Field #7
+Number of milliseconds spent reading
+This is the total number of milliseconds spent by all reads (as measured from __make_request() to end_that_request_last()).
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 10
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 1
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:Read:Ops per second
+ 7
+
+
+ custom.vfs.dev.read.ops[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 0
+
+ ops/s
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+ Field 1 -- # of reads completed
+ This is the total number of reads completed successfully.
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 10
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 1
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:Read:Bytes/sec
+ 7
+
+
+ custom.vfs.dev.read.sectors[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 0
+
+ B/sec
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+ Field 4 -- # of milliseconds spent reading
+ This is the total number of milliseconds spent by all reads (as
+ measured from __make_request() to end_that_request_last()).
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 10
+
+
+
+ 1
+ 512
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 1
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:IO:Weight:ms
+ 7
+
+
+ custom.vfs.dev.weight.io.ms[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 3
+
+ ms
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+ Field 11 -- weighted # of milliseconds spent doing I/Os
+ This field is incremented at each I/O start, I/O completion, I/O
+ merge, or read of these stats by the number of I/Os in progress
+ (field 9) times the number of milliseconds spent doing I/O since the
+ last update of this field. This can provide an easy measure of both
+ I/O completion time and the backlog that may be accumulating.
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 10
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 1
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:Write:Latency
+ 15
+
+
+ custom.vfs.dev.write.latency[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 3
+
+ ms
+
+
+ 0
+ 0
+
+ 0
+
+ custom.vfs.dev.write.ms[{#DEVICENAME}] / custom.vfs.dev.write.ops[{#DEVICENAME}] / 1000
+
+ 0
+
+
+
+
+
+ 8 / 5
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 10
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:Write:Merged
+ 7
+
+
+ custom.vfs.dev.write.merged[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 3
+
+ Ops/s
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+ Field 6 -- # of writes merged
+ See the description of field 2.
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 10
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 1
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:Write:ms
+ 7
+
+
+ custom.vfs.dev.write.ms[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 3
+
+ ms
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+ Field 8 -- # of milliseconds spent writing
+ This is the total number of milliseconds spent by all writes (as
+ measured from __make_request() to end_that_request_last()).
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 10
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 1
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:Write:Ops per second
+ 7
+
+
+ custom.vfs.dev.write.ops[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 3
+
+ ops/s
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+ Field 5 -- # of writes completed
+ This is the total number of writes completed successfully.
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 10
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 1
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+ Disk:$1:Write:Bytes/sec
+ 7
+
+
+ custom.vfs.dev.write.sectors[{#DEVICENAME}]
+ 1m
+ 1w
+ 365d
+ 0
+ 3
+
+ B/sec
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+
+
+
+
+
+ Field #10
+This is the total number of sectors written successfully.
+ 0
+
+
+ Disk Performance
+
+
+
+
+
+
+ 10
+
+
+
+ 1
+ 512
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 1
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+ Disk {#DEVICENAME} - await
+ 900
+ 200
+ 0.0000
+ 100.0000
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0.0000
+ 0.0000
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 0
+ FF4000
+ 0
+ 2
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.io.ms[{#DEVICENAME}]
+
+
+
+ 1
+ 0
+ 80FF00
+ 0
+ 2
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.read.latency[{#DEVICENAME}]
+
+
+
+ 2
+ 0
+ 0040FF
+ 0
+ 2
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.write.latency[{#DEVICENAME}]
+
+
+
+
+
+ Disk {#DEVICENAME} - Bytes/second
+ 900
+ 200
+ 0.0000
+ 100.0000
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0.0000
+ 0.0000
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 1
+ 0080FF
+ 0
+ 2
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.write.sectors[{#DEVICENAME}]
+
+
+
+ 1
+ 1
+ 80FF00
+ 0
+ 2
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.read.sectors[{#DEVICENAME}]
+
+
+
+
+
+ Disk {#DEVICENAME} - Merged
+ 900
+ 200
+ 0.0000
+ 100.0000
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0.0000
+ 0.0000
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 0
+ FF4000
+ 0
+ 2
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.write.merged[{#DEVICENAME}]
+
+
+
+ 1
+ 0
+ 80FF00
+ 0
+ 2
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.read.merged[{#DEVICENAME}]
+
+
+
+ 2
+ 0
+ 0040FF
+ 0
+ 2
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.discards.merged[{#DEVICENAME}]
+
+
+
+
+
+ Disk {#DEVICENAME} - Ops/second
+ 900
+ 200
+ 0.0000
+ 100.0000
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0.0000
+ 100.0000
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 1
+ F44336
+ 1
+ 2
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.io.ms[{#DEVICENAME}]
+
+
+
+ 1
+ 0
+ 0080FF
+ 0
+ 2
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.write.ops[{#DEVICENAME}]
+
+
+
+ 2
+ 0
+ 80FF00
+ 0
+ 2
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.read.ops[{#DEVICENAME}]
+
+
+
+
+
+ Disk {#DEVICENAME} - Overview
+ 900
+ 200
+ 0.0000
+ 100.0000
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0.0000
+ 0.0000
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 0
+ 00C8C8
+ 0
+ 7
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.io.active[{#DEVICENAME}]
+
+
+
+ 1
+ 0
+ 009600
+ 1
+ 7
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.write.sectors[{#DEVICENAME}]
+
+
+
+ 2
+ 0
+ 960096
+ 0
+ 7
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.write.merged[{#DEVICENAME}]
+
+
+
+ 3
+ 0
+ 000096
+ 0
+ 7
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.write.ops[{#DEVICENAME}]
+
+
+
+ 4
+ 0
+ C8C800
+ 1
+ 7
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.read.sectors[{#DEVICENAME}]
+
+
+
+ 5
+ 0
+ 960000
+ 0
+ 7
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.read.merged[{#DEVICENAME}]
+
+
+
+ 6
+ 0
+ C8C8C8
+ 0
+ 7
+ 0
+ -
+ Template Active OS Linux Disk Performance
+ custom.vfs.dev.read.ops[{#DEVICENAME}]
+
+
+
+
+
+
+
+ 3s
+
+
+
+ 200
+ 1
+ 0
+
+
+ 0
+ 1
+ 0
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
diff --git a/Template Disk Performance.xml b/Template Disk Performance.xml
index dc4a0dc..802fc1a 100644
--- a/Template Disk Performance.xml
+++ b/Template Disk Performance.xml
@@ -29,7 +29,7 @@
0
- custom.vfs.discover_disks
+ custom.vfs.dev.discovery
3600
0
diff --git a/lld-disks.py b/lld-disks.py
deleted file mode 100644
index 48fd3d6..0000000
--- a/lld-disks.py
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/python
-import os
-import json
-
-if __name__ == "__main__":
- # Iterate over all block devices, but ignore them if they are in the
- # skippable set
- skippable = ("sr", "loop", "ram")
- devices = (device for device in os.listdir("/sys/class/block")
- if not any(ignore in device for ignore in skippable))
- data = [{"{#DEVICENAME}": device} for device in devices]
- print(json.dumps({"data": data}, indent=4))
diff --git a/userparameter_diskstats.conf b/userparameter_diskstats.conf
index c5efc35..4bcf82a 100644
--- a/userparameter_diskstats.conf
+++ b/userparameter_diskstats.conf
@@ -1,5 +1,6 @@
-UserParameter=custom.vfs.discover_disks,/usr/local/bin/lld-disks.py
+UserParameter=custom.vfs.dev.discovery,DEVS=`grep -E -v 'fd|loop|ram|sr|major|^$|dm-' /proc/partitions | awk '{if($2==0||($2%8==0))print $4}'|sed 's/\//\!/g'`;POSITION=1;echo "{";echo " \"data\":[";for DEV in $DEVS;do if [ $POSITION -gt 1 ];then echo -n ",";fi;echo -n " { \"{#DEVICENAME}\": \"$DEV\"}";POSITION=`expr $POSITION + 1`;done;echo "";echo " ]";echo "}"
+# see https://www.kernel.org/doc/Documentation/iostats.txt
UserParameter=custom.vfs.dev.read.ops[*],awk '{print $$1}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.read.merged[*],awk '{print $$2}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.read.sectors[*],awk '{print $$3}' /sys/class/block/$1/stat
@@ -11,3 +12,8 @@ UserParameter=custom.vfs.dev.write.ms[*],awk '{print $$8}' /sys/class/block/$1/s
UserParameter=custom.vfs.dev.io.active[*],awk '{print $$9}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.io.ms[*],awk '{print $$10}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.weight.io.ms[*],awk '{print $$11}' /sys/class/block/$1/stat
+# discards
+UserParameter=custom.vfs.dev.discards.ops[*],awk '{if($$12=="")print 0;else print $$12;}' /sys/class/block/$1/stat
+UserParameter=custom.vfs.dev.discards.merged[*],awk '{if($$13=="")print 0;else print $$13;}' /sys/class/block/$1/stat
+UserParameter=custom.vfs.dev.discards.sectors[*],awk '{if($$14=="")print 0;else print $$14;}' /sys/class/block/$1/stat
+UserParameter=custom.vfs.dev.discards.ms[*],awk '{if($$15=="")print 0;else print $$15;}' /sys/class/block/$1/stat